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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| //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);
static int row = img.rows;
static int col = img.cols;
static Mat src = Mat::zeros( Size( row, col ), CV_8UC1 );
void on_mouse(int, int, int, int, void* );
int main()
{
app = 0;
namedWindow("myImage", CV_WINDOW_AUTOSIZE);
setMouseCallback("myImage", on_mouse, 0);
imshow("myImage", img);
waitKey(0);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
Mat src_copy = src.clone();
findContours( src_copy, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
// Create Window and show your results
char* source_window = "Contour";
namedWindow( source_window, CV_WINDOW_AUTOSIZE );
imshow( source_window, src );
waitKey(0);
// Create Mask
Mat_<uchar> mask (row,col);
for (int j=0; j<row; j++)
for (int i=0; i<col; i++)
{
if ( pointPolygonTest( contours[0], Point2f(i,j),false) >= 0)
{mask(j,i)=255;}
else
{mask(j,i)=0;}
}
// Display Mask
char* mask_window = "Mask";
namedWindow( mask_window, CV_WINDOW_AUTOSIZE );
imshow( mask_window, mask );
waitKey(0);
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);
line(src,vect[size-2],vect[size-1],Scalar( 255 ),1);
imshow("myImage", img);
}
cout<<"Coordonnees du point pt : "<<x<<","<<y<<endl<<"taille de vect : "<<vect.size()<<endl<<"vect du point : "<<vect[vect.size()]<<endl;
}
if(evt == CV_EVENT_RBUTTONDOWN)
{
int size = vect.size();
Point pt1 = vect[0];
line(img,vect[size-1],vect[0],CV_RGB(0,0,0),2);
line(src,vect[size-1],vect[0],Scalar( 255 ),1);
imshow("myImage", img);
}
} |
Partager