Heim > Backend-Entwicklung > C++ > Wie kann ich effizient auf Pixelwerte in einer OpenCV-Matrix zugreifen?

Wie kann ich effizient auf Pixelwerte in einer OpenCV-Matrix zugreifen?

Barbara Streisand
Freigeben: 2024-12-07 13:46:12
Original
946 Leute haben es durchsucht

How to Efficiently Access Pixel Values in an OpenCV Matrix?

Zugriff auf Pixelwerte in einer OpenCV-Matrix

Das Abrufen von Pixelwerten aus einem OpenCV-Mat-Bild kann über verschiedene Methoden basierend auf der Datenstruktur erfolgen Wird zur Darstellung der Pixel verwendet.

Angenommen, es handelt sich um ein Bild vom Typ CV_8UC3, bei dem jedes Pixel durch drei dargestellt wird 8-Bit-Kanäle ohne Vorzeichen (BGR) können den Wert eines bestimmten Pixels wie folgt abrufen:

for (int i = 0; i < foo.rows; i++) {
    for (int j = 0; j < foo.cols; j++) {
        Vec3b bgrPixel = foo.at<Vec3b>(i, j);

        // Access and manipulate BGR values...
    }
}
Nach dem Login kopieren

Vec3b ist ein Container für 3-Element-Vektoren, wobei jedes Element einem B, G und entspricht R-Kanal-Wert.

Leistung optimieren

Um die Leistung zu verbessern, direkter Zugriff auf Datenpuffer kann verwendet werden:

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

Alternativ kann die row()-Methode verwendet werden, um auf einzelne Zeilen zuzugreifen:

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

Das obige ist der detaillierte Inhalt vonWie kann ich effizient auf Pixelwerte in einer OpenCV-Matrix zugreifen?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage