Zugriff auf Pixelwerte von CV_32F / CV_64F Mat?

8

Ich arbeitete an Homographie und wann immer ich versuche, die Werte der H-Matrix (Typ CV_64F) mit H.at<float>(i, j) zu überprüfen, bekomme ich Zufallszahlen (manchmal Müllwert). Ich möchte auf Pixelwerte der Float-Matrix zugreifen. Gibt es einen Weg, es zu tun?

%Vor%

Dies zeigt das korrekte Bild einer Identitätsmatrix, aber beim Versuch, auf Pixelwerte zuzugreifen, bekomme ich

  

0,000000   1,875000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000

Warum ist das so?

    
Froyo 28.02.2013, 07:47
quelle

2 Antworten

16

Sie sollten das versuchen:

%Vor%

weil Ihre Matrix vom "Typ" CV_64F ist, was wiederum bedeutet, dass sie Elemente vom Typ double , nicht float enthält.

Übrigens bin ich mir nicht sicher, ob Sie sich dessen bewusst sind, aber Sie können cout verwenden, um die Matrix so zu drucken:

%Vor%

Ich fand das nützlich für die Inspektion einer kleinen Matrix oder einer Scheibe einer Matrix.

    
lightalchemist 28.02.2013, 07:53
quelle
3

Das folgende Beispiel initialisiert eine Hilbert-Matrix:

%Vor%

Beachten Sie, dass die im at-Operator verwendete Größenkennung nicht beliebig gewählt werden kann. Es hängt von dem Bild ab, von dem Sie versuchen, die Daten abzurufen. Die folgende Tabelle gibt einen besseren Einblick:

Wenn die Matrix vom Typ CV_8U ist, verwenden Sie Mat.at<uchar>(y,x) .

Wenn die Matrix vom Typ CV_8S ist, verwenden Sie Mat.at<schar>(y,x) .

Wenn die Matrix vom Typ CV_16U ist, verwenden Sie Mat.at<ushort>(y,x) .

Wenn die Matrix vom Typ CV_16S ist, verwenden Sie Mat.at<short>(y,x) .

Wenn die Matrix vom Typ CV_32S ist, verwenden Sie Mat.at<int>(y,x) .

Wenn die Matrix vom Typ CV_32F ist, verwenden Sie Mat.at<float>(y,x) .

Wenn die Matrix vom Typ CV_64F ist, verwenden Sie Mat.at<double>(y,x) .

(Aus OpenCV-Dokumenten )

    
shahar_m 04.04.2017 18:25
quelle

Tags und Links