In OpenCV gibt es mehrere Möglichkeiten, auf Pixelwerte innerhalb eines Mat-Bilds zuzugreifen und diese zu bearbeiten. Ein häufiges Szenario ist das Abrufen des Kanalwerts eines bestimmten Pixels.
Wenn das Bild im CV_8UC3-Format gespeichert ist, das ein Dreikanalbild mit 8-Bit-Ganzzahl ohne Vorzeichen darstellt Werte (BGR) können Sie über den Datentyp Vec3b auf die einzelnen Kanäle zugreifen. Wenn foo beispielsweise ein Mat-Bild dieses Typs ist, können Sie mit dem folgenden Code über die Pixel iterieren:
for (int i = 0; i < foo.rows; i++) { for (int j = 0; j < foo.cols; j++) { Vec3b bgrPixel = foo.at<Vec3b>(i, j); // Access the pixel's BGR values... } }
Aus Leistungsgründen ist dies möglich Greifen Sie auch direkt auf die Pixelwerte zu, indem Sie auf den Datenpuffer zugreifen. Dies ermöglicht einen schnelleren Zugriff, erfordert jedoch mehr manuelle Handhabung der Datenkonvertierung und Kanaloffsets. Hier ist ein Beispiel, wie das geht:
uint8_t* pixelPtr = (uint8_t*)foo.data; int cn = foo.channels(); Scalar_<uint8_t> bgrPixel; for (int i = 0; i < foo.rows; i++) { for (int j = 0; j < foo.cols; j++) { bgrPixel.val[0] = pixelPtr[i*foo.cols*cn + j*cn + 0]; // B bgrPixel.val[1] = pixelPtr[i*foo.cols*cn + j*cn + 1]; // G bgrPixel.val[2] = pixelPtr[i*foo.cols*cn + j*cn + 2]; // R // Access the pixel's BGR values... } }
Alternativ können Sie auch die row()-Methode verwenden, um auf einzelne Zeilen des Bildes zuzugreifen, wie im Folgenden gezeigt Code:
int cn = foo.channels(); Scalar_<uint8_t> bgrPixel; for (int i = 0; i < foo.rows; i++) { uint8_t* rowPtr = foo.row(i); for (int j = 0; j < foo.cols; j++) { bgrPixel.val[0] = rowPtr[j*cn + 0]; // B bgrPixel.val[1] = rowPtr[j*cn + 1]; // G bgrPixel.val[2] = rowPtr[j*cn + 2]; // R // Access the pixel's BGR values... } }
Denken Sie daran, dass OpenCV Pixelwerte im BGR-Format (Blau, Grün, Rot) statt im RGB speichert, Sie müssen also vorsichtig sein davon beim Zugriff auf die Kanäle.
Das obige ist der detaillierte Inhalt vonWie greifen Sie in OpenCV auf Pixelkanalwerte in einem Mat-Bild zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!