Bonjour à tous!
Bon, j'utilise OpenCV depuis quelques semaines maintenant et je n’arrêterais pas de me laisser suprendre par la complexité de choses qui semblent banales.
En bref, j'ai une Mat hsv qui représente une image HSV avec chacun des éléments de cette matrice : les pixels de mon image, codés sur 3 chaines : h, s, et v.
Je veux tout simplement avoir accès aux valeurs contenues dans ma Mat. Simple non? ... Faut croire que non...
Voici mon bout de code :
Deux méthodes d'accès utilisant Mat.at<>() qui me renvoient un throw avec "OpenCv Error : Assertion failed"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 static void onMouse( int event, int x, int y, int, void* ) { // Local variables Mat hsv; if(event == CV_EVENT_LBUTTONUP) { // Get the hsv image cvtColor(imRGB, hsv, CV_BGR2HSV); // Get the selected pixel //Premiere methode pour avoir acces aux cannaux h,s,v //h = hsv.at<int>(y, x, 1); //s = hsv.at<int>(y, x, 2); //v = hsv.at<int>(y, x, 3); //Deuxième méthode //cout << hsv.at<int>(y,x) << " " << hsv.at<int>(y,x) << " " << hsv.at<int>(y,x) << endl; } }
A noter qu'ici, il s'agit d'une fonction onMouse qui est appelée en cas de clic souris avec x, y étant les coordonnées de mon curseur dans ma matrice (fonction testée avec affichage des valeurs de x et y, et opérationnelle)
Voilà, la question est donc simple : qu'est ce qui cloche? existe-t-il une autre méthode que Mat.at<>() pour accéder aux éléments d'une Mat? comment gérer le fait que la Mat soit de dimension 2D avec comme éléments des vecteurs 1D (h,s,v)?
Merci de m'avoir lu et d'avance pour votre aide. J'espère avoir été clair dans l’énoncé de mon souci.
Au plaisir de vous lire à mon tour.
A.
Partager