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
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
aber ich bin mir nicht sicher, ob es funktionieren wird. Hier sind einige Möglichkeiten, die Daten von [i, j] an value:
zu übergebenvalue = B.at<float>(i, j)
value = B.ptr<float>(i)[j]
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?
Tags und Links opencv