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)` ?

Pourquoi `Point(x,y)` dans OpenCV produit-il des résultats inattendus lorsqu'il est utilisé avec `line()` par rapport à `src.at(i,j)` ?

Linda Hamilton
Libérer: 2024-12-19 07:25:09
original
115 Les gens l'ont consulté

Why does `Point(x,y)` in OpenCV produce unexpected results when used with `line()` compared to `src.at(i,j)`?

OpenCV : Comprendre la représentation des points (x, y)

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);
Copier après la connexion

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);
Copier après la connexion

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 :

  • src.at(i,j) : utilise (i,j) comme (ligne, colonne).
  • Point(x,y) : utilise (x,y) comme (colonne, ligne).

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(i,j).

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(colonne, ligne).

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!

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