Maison >développement back-end >C++ >Pourquoi `Point(x,y)` dans OpenCV produit-il des résultats inattendus lorsqu'il est utilisé avec `line()` par rapport à `src.at(i,j)` ?
Dans le traitement d'images, comprendre l'ordre des points peut être crucial. OpenCV, une bibliothèque de vision par ordinateur populaire, utilise un système de coordonnées qui peut prêter à confusion concernant la représentation des points.
La question :
Considérez une image stockée dans un Matrice src de dimensions 300x200. Lors de l'application de l'opération suivante :
for(int i = 0; i < src.rows; i++){ for(int j = 0; j < src.cols; j++){ line( src, Point(i,j), Point(i,j), Scalar( 255, 0, 0 ), 1,8 ); } } imshow("A",src); waitKey(0);
Le résultat attendu est de remplir toute l'image de lignes blanches. Cependant, seule la partie supérieure devient blanche.
Ce comportement contraste avec l'opération suivante :
for(int i = 0; i < src.rows; i++){ for(int j = 0; j < src.cols; j++){ src.at<uchar>(i,j)=255; } } imshow("A",src); waitKey(0);
qui réussit à remplir toute l'image en blanc.
La Réponse :
L'explication réside dans les différentes représentations utilisées pour points :
Cette divergence provient de la double nature de Mat d'OpenCV, qui représente à la fois des images et des matrices. En notation matricielle, l'ordre des lignes principales est utilisé, où le premier index représente la ligne et le deuxième index représente la colonne. Cette convention s'aligne sur src.at
En revanche, le système de coordonnées des points suit la notation de l'image, où la première valeur spécifie la direction x (colonne) et la seconde value spécifie la direction y (ligne). Ceci explique l'utilisation de l'ordre (colonne, ligne) dans Point(x, y) et l'alignement avec src.at
Comprendre cette distinction est essentiel pour accéder et modifier efficacement points 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!