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
Libérer: 2024-12-09 17:48:15
original
955 Les gens l'ont consulté

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

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!

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