Détection simple des contours
This commit is contained in:
parent
bf4a35f2c8
commit
ea6879e9a8
3 changed files with 56 additions and 21 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.*.swp
|
|
@ -46,15 +46,9 @@ int main(int, char**)
|
|||
imshow("Detection", Binaire);
|
||||
findContours(Binaire, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
|
||||
Mat Dessin = Mat::zeros(X,Y, CV_8UC1);
|
||||
unsigned int max = 0;
|
||||
int id = 0;
|
||||
for(numc = 0; numc<contours.size(); numc++) {
|
||||
if (contours[numc].size() > max) {
|
||||
max = contours[numc].size();
|
||||
id = numc;
|
||||
}
|
||||
drawContours(Dessin, contours, id, 255);
|
||||
}
|
||||
drawContours(Dessin, contours, id, 255);
|
||||
imshow("Contours", Dessin);
|
||||
if(waitKey(30) == 27) {
|
||||
break;
|
||||
|
|
|
@ -1,24 +1,64 @@
|
|||
#include "opencv2/opencv.hpp"
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
cv::VideoCapture cap(0); // open the default camera
|
||||
if(!cap.isOpened()) // check if we succeeded
|
||||
int seuil=80;
|
||||
char detect;
|
||||
VideoCapture cap(0);
|
||||
if(!cap.isOpened())
|
||||
return -1;
|
||||
|
||||
cv::Mat edges;
|
||||
cv::namedWindow("edges",1);
|
||||
while(1){
|
||||
cv::Mat frame;
|
||||
cap >> frame; // get a new frame from camera
|
||||
//cv::cvtColor(frame, edges, CV_BGR2GRAY);
|
||||
//cv::GaussianBlur(edges, edges, cv::Size(7,7), 1.5, 1.5);
|
||||
//cv::Canny(edges, edges, 0, 30, 3);
|
||||
cv::imshow("edges", frame);
|
||||
if(cv::waitKey(30) == 27) {
|
||||
namedWindow("Image",1);
|
||||
namedWindow("Detection",1);
|
||||
namedWindow("Contours",1);
|
||||
for(;;) {
|
||||
int X,Y,DIM,index,indexNB;
|
||||
unsigned int numc;
|
||||
uchar R,G,B;
|
||||
vector<vector<Point> > contours;
|
||||
vector<Vec4i> hierarchy;
|
||||
Mat frame;
|
||||
cap >> frame;
|
||||
X=frame.rows;
|
||||
Y=frame.cols;
|
||||
Mat Binaire(X,Y,CV_8UC1);
|
||||
imshow("Image", frame);
|
||||
GaussianBlur(frame, frame, Size(7,7), 1.5, 1.5);
|
||||
X=frame.rows;
|
||||
Y=frame.cols;
|
||||
DIM=frame.channels();
|
||||
for (index=0,indexNB=0;index<DIM*X*Y;index+=DIM,indexNB++)
|
||||
{
|
||||
detect=0;
|
||||
B=frame.data[index ];
|
||||
G=frame.data[index + 1];
|
||||
R=frame.data[index + 2];
|
||||
if ((R>G) && (R>B))
|
||||
if (((R-B)>=seuil) || ((R-G)>=seuil))
|
||||
detect=1;
|
||||
if (detect==1)
|
||||
Binaire.data[indexNB]=255;
|
||||
else
|
||||
Binaire.data[indexNB]=0;
|
||||
}
|
||||
imshow("Detection", Binaire);
|
||||
findContours(Binaire, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
|
||||
Mat Dessin = Mat::zeros(X,Y, CV_8UC1);
|
||||
unsigned int max = 0;
|
||||
int id = 0;
|
||||
for(numc = 0; numc<contours.size(); numc++) {
|
||||
if (contours[numc].size() > max) {
|
||||
max = contours[numc].size();
|
||||
id = numc;
|
||||
}
|
||||
}
|
||||
drawContours(Dessin, contours, id, 255);
|
||||
imshow("Contours", Dessin);
|
||||
if(waitKey(30) == 27) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// the camera will be deinitialized automatically in VideoCapture destructor
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue