Maison > développement back-end > C++ > Comment accéder à la valeur de canal d'un pixel spécifique dans une image OpenCV Mat ?

Comment accéder à la valeur de canal d'un pixel spécifique dans une image OpenCV Mat ?

Patricia Arquette
Libérer: 2024-11-15 13:04:02
original
850 Les gens l'ont consulté

How do I access the channel value of a specific pixel in an OpenCV Mat image?

Comment récupérer la valeur du canal de pixel à partir d'une image Mat dans OpenCV

Lorsque vous travaillez avec OpenCV, accéder à la valeur de canal d'un pixel particulier peut être crucial pour les tâches de traitement d'image . Cet article répond à une question courante : "Comment puis-je obtenir la valeur de canal pour un pixel spécifique ?"

En supposant que l'image représentée par l'objet Mat foo est dans un format 8 bits couramment utilisé par canal (CV_8UC3), l'obtention des valeurs des canaux nécessite les étapes suivantes :

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

        // Process B, G, and R values here...
    }
}
Copier après la connexion

Dans ce code, Vec3b représente un vecteur à 3 canaux où chaque canal correspond aux valeurs Bleu, Vert et Rouge (BGR).

Optimisation des performances :

Pour des raisons de performances, un accès direct au buffer de données peut être privilégié :

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 B, G, and R values here...
    }
}
Copier après la connexion

Alternativement, l'accès basé sur les lignes peut être utilisé :

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 B, G, and R values here...
    }
}
Copier après la connexion

En suivant ces méthodes, vous pouvez récupérer efficacement les valeurs de canal de pixels individuels pour diverses tâches de traitement d'image dans OpenCV.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal