OpenCV C ++: Wie Zugriff Pixelwert CV_32F durch Uchar Datenzeiger

7

Kurz möchte ich wissen, ob es möglich ist, direkt auf den Pixelwert zuzugreifen einer CV_32F Mat, durch Mat-Mitglied "uchar * data".

Ich kann es ohne Probleme machen, wenn Mat CV_8U ist, zum Beispiel:

%Vor%

Das Problem ist, wenn ich versuche, die gleiche Operation mit der folgenden Matrix zu machen,

%Vor%

Vielen Dank, Valerio

    
valerio_sperati 10.07.2013, 11:08
quelle

2 Antworten

15

Sie können die Methode ptr verwenden, die den Zeiger auf die Matrixzeile zurückgibt:

%Vor%

Sie können data pointer auch auf float setzen und elem_step anstelle von step verwenden, wenn die Matrix fortlaufend ist:

%Vor%     
jet47 10.07.2013 12:46
quelle
5

Beachten Sie, dass CV_32F bedeutet, dass die Elemente float anstelle von uchar sind. Das "F" bedeutet hier "float". Und das "U" in CV_8U steht für unsigned integer . Vielleicht gibt dein Code deshalb nicht den richtigen Wert. Wenn p als uchar* deklariert wird, bewirkt p[4*B.step+5] , dass p in die fünfte Zeile verschoben wird und sizeof(uchar)*5 vorrückt, was tendenziell falsch ist. Sie können versuchen

%Vor%

aber ich bin mir nicht sicher, ob es funktionieren wird. Hier sind einige Möglichkeiten, die Daten von [i, j] an value:

zu übergeben
  1. value = B.at<float>(i, j)
  2. value = B.ptr<float>(i)[j]
  3. value = ((float*)B.data)[i*B.step+j]

Der 3. Weg wird jedoch nicht empfohlen, da er leicht überlaufen kann. Außerdem sollte eine 6x5-Matrix von B.create(6, 5, CV_32FC1) erstellt werden, denke ich?

    
Manas 10.07.2013 11:30
quelle

Tags und Links