Maison > développement back-end > C++ > Comment extraire les valeurs de canal de pixels d'une image Mat dans OpenCV ?

Comment extraire les valeurs de canal de pixels d'une image Mat dans OpenCV ?

DDD
Libérer: 2024-11-15 22:47:02
original
774 Les gens l'ont consulté

How to Extract Pixel Channel Values from a Mat Image in OpenCV?

OpenCV : Extraire les valeurs de canal de pixel à partir d'images Mat

Question : Comment pouvez-vous récupérer la valeur de canal d'un pixel spécifique dans une image Mat ?

Réponse :

Pour un objet Mat où le type de pixel est CV_8UC3 (une image 3 canaux non signée de 8 bits), la méthode suivante peut être utilisée :

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...
    }
}
Copier après la connexion

Dans ce code, Vec3b représente un pixel 3 canaux avec des entiers non signés de 8 bits pour chaque canal. at est une fonction membre qui vous permet d'accéder à la valeur du pixel au niveau de la ligne et de la colonne spécifiées.

Optimisation des performances :

Pour des performances améliorées, envisagez d'accéder au tampon de données directement :

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...
    }
}
Copier après la connexion

Vous pouvez également utiliser la ligne méthode :

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...
    }
}
Copier après la connexion

Remarque : OpenCV stocke en interne les images au format BGR, et non RVB.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal