Bonjour,
J'ai écrit un code permettant d'afficher une image et de sélectionner une ROI (Region Of Interest) à l'aide de la souris. J'obtiens de cette façon un vecteur composé des points sélectionnés sur l'image.
Voici le code:
Je cherche à obtenir une matrice binaire de même taille que mon image dont chaque élément vaut 0 si cet élément est en dehors du contour créer par les points, et qui vaut 1 s'il est à l’intérieur.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 //Includes #include <iostream> #include <cstdio> #include <cstdlib> #include <stdio.h> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <vector> using namespace std; using namespace cv; static int app; static vector<Point> vect; static Mat img = imread("C:/img.jpg",0); void on_mouse(int, int, int, int, void* ); int main() { app = 0; namedWindow("myWindow", CV_WINDOW_AUTOSIZE); setMouseCallback("myWindow", on_mouse, 0); imshow("myWindow", img); waitKey(0); cvDestroyWindow("MyWindow"); return 0; } void on_mouse(int evt, int x, int y, int flags, void* param) { if(evt == CV_EVENT_LBUTTONDOWN) { Point pt(x,y); vect.push_back(pt); app++; if(app>1) { int size = vect.size(); line(img,vect[size-2],vect[size-1],CV_RGB(0,0,0),2); imshow("myWindow", img); } } if(evt == CV_EVENT_RBUTTONDOWN) { int size = vect.size(); line(img,vect[size-1],vect[0],CV_RGB(0,0,0),2); imshow("myWindow", img); } }
Sur un autre forum, on m'a conseillé d'utiliser le bout de code suivant:
Le problème c'est que je ne sais pas comment créer l'élément "contours" à partir de mes points. En créant un vecteur de vecteur de points, mon IDE ne me retourne pas d'erreur mais lorsque j’exécute le code j’obtiens une image composée de bandes noires et grises à la place d'un polygone.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Mat output(img.rows,img.cols,CV_8UC1);//your img drawContours(output, contours, 0, Scalar(1), CV_FILLED);//now you have binary image
Toute aide est la bienvenue, merci d'avance.
Partager