Maison >développement back-end >C++ >En quoi le « Point(x,y) » d'OpenCV diffère-t-il de « at(i,j) » dans Matrix Access ?

En quoi le « Point(x,y) » d'OpenCV diffère-t-il de « at(i,j) » dans Matrix Access ?

DDD
DDDoriginal
2024-12-09 17:48:15956parcourir

How Does OpenCV's `Point(x,y)` Differ from `at(i,j)` in Matrix Access?

Comprendre le système de coordonnées dans OpenCV

Dans les bibliothèques de traitement d'images comme OpenCV, le système de coordonnées et l'ordre des éléments de la matrice peuvent prêter à confusion. Cet article vise à clarifier ces concepts, notamment l'utilisation de Point(x,y) dans OpenCV par rapport à at(i,j) pour accéder aux éléments de la matrice.

Ordre matriciel

Cv d'OpenCV : La structure de données :Mat est utilisée à la fois pour les images et les matrices. Mathématiquement, les matrices sont classées dans l'ordre des lignes principales, ce qui signifie que le premier index désigne la ligne et le deuxième index la colonne.

Coordonnées des points

Les points d'un système de coordonnées sont généralement classés avec le x -axe en premier et l'axe y en second (système de coordonnées cartésiennes). Cependant, dans le traitement d'image, l'ordre des axes utilisé est connu sous le nom de notation d'image, où la première valeur représente la direction x (abscisse) et la deuxième valeur la direction y (ordonnée).

OpenCV Matrix Access

La méthode at(i,j) d'OCV permet d'accéder aux éléments à l'aide d'indices (ligne, colonne), le coin supérieur gauche de la matrice étant (0,0).

Point Access

Le constructeur Point(x,y) dans OpenCV permet d'accéder aux éléments d'un cv::Mat en utilisant la notation d'image, où x représente la colonne et y la ligne.

Exemple

Considérons une matrice 300x200 (src) :

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);
  }
}

Ce code a pour but de tracer un trait blanc sur toute l'image. Cependant, il ne remplit que la partie supérieure de l'image. En effet, la fonction line utilise le constructeur Point(i,j), qui interprète i comme colonne et j comme ligne.

Utiliser at(i,j) au lieu de Point(i,j) remplissez correctement toute l'image avec du blanc, car elle utilise l'ordre (ligne, colonne).

Conclusion

Comprendre la distinction entre l'ordre ligne/colonne dans Les matrices et la notation d'image utilisées pour les points dans OpenCV sont cruciales pour manipuler efficacement les images et les matrices dans OpenCV. La méthode at(i,j) et le constructeur Point(x,y) offrent des moyens pratiques d'accéder aux éléments basés sur différents systèmes de coordonnées, répondant aux besoins spécifiques de l'application.

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!

Déclaration:
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