Maison > Article > développement back-end > Comment accéder efficacement aux valeurs des canaux de pixels dans les images OpenCV Mat ?
Récupération des valeurs de canal de pixel à partir des représentations OpenCV Mat
Pour obtenir la valeur de canal pour un pixel spécifique dans une image OpenCV Mat, vous pouvez utiliser les méthodes suivantes :
Méthode 1 : Utiliser OpenCV Vec3b
Pour les images Mat de type CV_8UC3, contenant trois canaux (bleu, vert et rouge), la structure de données Vec3b 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); // Access individual channel values: uint8_t blue = bgrPixel[0]; uint8_t green = bgrPixel[1]; uint8_t red = bgrPixel[2]; } }
Méthode 2 : Accès direct au tampon
Pour des performances améliorées, un accès direct au tampon de données d'image peut être utilisé :
uint8_t* pixelPtr = (uint8_t*)foo.data; int cn = foo.channels(); // Number of channels per pixel for(int i = 0; i < foo.rows; i++) { for(int j = 0; j < foo.cols; j++) { // Retrieve channel values: uint8_t blue = pixelPtr[i*foo.cols*cn + j*cn + 0]; uint8_t green = pixelPtr[i*foo.cols*cn + j*cn + 1]; uint8_t red = pixelPtr[i*foo.cols*cn + j*cn + 2]; } }
Remarque : OpenCV stocke en interne les données de pixels au format BGR (bleu, vert, rouge), plutôt qu'en 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!