Wie der Zugriff auf die pixel-Werte der CV_32F/CV_64F Matte?
Ich arbeiten war homography und immer wenn ich versuche zu prüfen, die Werte der H-matrix (Typ CV_64F) mit H.at<float>(i, j)
bekomme ich Zufallszahlen(manchmal Müll Wert). Ich möchte Zugriff auf die pixel-Werte der float-matrix. Gibt es eine Möglichkeit, es zu tun?
Mat A = Mat::eye(3, 3, CV_64F);
float B;
for(int i=0; i<A.rows; i++)
{
for(int j=0; j<A.cols; j++)
{
printf("%f\n", A.at<float>(i, j));
}
}
imshow("identity", A);
waitKey(0);
Dies zeigt korrektes Bild von einer Identitätsmatrix, aber beim Zugriff auf die pixel-Werte, bekomme ich
0.000000
1.875000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
Warum ist das so?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie versuchen, diese:
weil Ihre matrix ist der "Typ"
CV_64F
was wiederum bedeutet, dass es enthält Elemente des Typsdouble
, nichtfloat
.Übrigens, ich bin mir nicht sicher, ob Sie sich dessen bewusst sind, aber Sie können
cout
zum drucken der matrix etwa so:Ich fand, dass dies nützlich sein für die Prüfung eine kleine matrix oder eine Scheibe einer matrix.
Dem nachfolgenden Beispiel initialisiert ein Hilbert-matrix:
Beachten Sie, dass die Größe der verwendeten Bezeichner in der in-operator kann nicht nach dem Zufallsprinzip ausgewählt werden. Es hängt vom Bild ab, von dem aus Sie versuchen, um Daten abzurufen. Die Tabelle unten gibt einen besseren Einblick in diese:
Wenn die matrix ist vom Typ CV_8U dann verwenden
Mat.at<uchar>(y,x)
.Wenn die matrix ist vom Typ CV_8S dann verwenden
Mat.at<schar>(y,x)
.Wenn die matrix ist vom Typ CV_16U dann verwenden
Mat.at<ushort>(y,x)
.Wenn die matrix ist vom Typ CV_16S dann verwenden
Mat.at<short>(y,x)
.Wenn die matrix ist vom Typ CV_32S dann verwenden
Mat.at<int>(y,x)
.Wenn die matrix ist vom Typ CV_32F dann verwenden
Mat.at<float>(y,x)
.Wenn die matrix ist vom Typ CV_64F dann verwenden
Mat.at<double>(y,x)
.(Entnommen aus OpenCV docs)