Heim > Backend-Entwicklung > C++ > Wie greifen Sie in OpenCV auf Pixelkanalwerte in einem Mat-Bild zu?

Wie greifen Sie in OpenCV auf Pixelkanalwerte in einem Mat-Bild zu?

DDD
Freigeben: 2024-11-25 01:46:14
Original
189 Leute haben es durchsucht

How do you access pixel channel values in a Mat image in OpenCV?

Pixelkanalwerte aus einem Mat-Bild in OpenCV extrahieren

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.

Verwendung von Vec3b

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...
    }
}
Nach dem Login kopieren

Verwendung des direkten Datenpufferzugriffs

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...
    }
}
Nach dem Login kopieren

Alternativ

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...
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage