Frage: Wie können Sie den Kanalwert eines bestimmten Pixels in einem Mat-Bild abrufen? ?
Antwort:
Für ein Mat-Objekt wo Der Pixeltyp ist CV_8UC3 (ein 8-Bit-3-Kanal-Bild ohne Vorzeichen). Die folgende Methode kann verwendet werden:
for(int i = 0; i < foo.rows; i++) { for(int j = 0; j < foo.cols; j++) { Vec3b bgrPixel = foo.at<Vec3b>(i, j); // Process the BGR values... } }
In diesem Code stellt Vec3b ein 3-Kanal-Pixel mit 8-Bit-Ganzzahlen ohne Vorzeichen dar für jeden Kanal. at ist eine Mitgliedsfunktion, die Ihnen den Zugriff auf den Pixelwert in der angegebenen Zeile und Spalte ermöglicht.
Leistungsoptimierung:
Für eine verbesserte Leistung sollten Sie den Zugriff auf den Datenpuffer in Betracht ziehen direkt:
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 // Process the BGR values... } }
Alternativ können Sie auch die Zeile verwenden Methode:
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 // Process the BGR values... } }
Hinweis: OpenCV speichert Bilder intern im BGR-Format, nicht im RGB.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich Pixelkanalwerte aus einem Mat-Bild in OpenCV?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!