1 | initial version |
You can use morphological operators like erode dilate or closing opening.
If you want to draw hole in your surface you have to use RETR_TREE insted of CV_RETR_EXTERNAL in findContours
2 | No.2 Revision |
You can use morphological operators like erode dilate or closing opening.
If you want to draw hole in your surface you have to use RETR_TREE insted of CV_RETR_EXTERNAL in findContours
About hierarchy : Original image is :
Contourr with hiereachy are
0 = [-1, -1, 1, -1] // contour 0 :-1 no next contour,-1 no previous contour, 1 contour #1 is a child, -1 no parent contour
1 = [3, -1, 2, 0] // contour 1 :-3 next contour,-1 no previous contour, 1 contour #2 is a child, 0 is parent contour
2 = [-1, -1, -1, 1]
3 = [-1, 1, -1, 0]
3 | No.3 Revision |
You can use morphological operators like erode dilate or closing opening.
If you want to draw hole in your surface you have to use RETR_TREE insted of CV_RETR_EXTERNAL in findContours
About hierarchy : Original image is :
Contourr with hiereachy are
0 = [-1, -1, 1, -1] // contour 0 :-1 no next contour,-1 no previous contour, 1 contour #1 is a child, -1 no parent contour
1 = [3, -1, 2, 0] // contour 1 :-3 next contour,-1 no previous contour, 1 contour #2 is a child, 0 is parent contour
2 = [-1, -1, -1, 1]
3 = [-1, 1, -1, 0]
program is :
Mat img = imread("C:/Users/Laurent.PC-LAURENT-VISI/Desktop/14887743804853655.jpg", CV_LOAD_IMAGE_GRAYSCALE);
imshow("original", img);
Mat y;
threshold(img, y, 50, 255, THRESH_BINARY);
imshow("threshold", y);
double ccMin, ccMax;
findContours(y, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
Mat c = Mat::zeros(img.size(), CV_8U);
for (int i = 0; i <contours.size(); i++)
{
cout<<i<<" = "<<hierarchy[i]<<"\n";
}
for (int i = 0; i <contours.size(); i++)
{
drawContours(c, contours, i, Scalar(255), 1, LINE_8, hierarchy, 0);
putText(c,format("%d",i),contours[i][0], FONT_HERSHEY_SIMPLEX,0.5,Scalar(255));
}
imshow("ctr",c);
imwrite("c.png",c);
waitKey(0);
4 | No.4 Revision |
You can use morphological operators like erode dilate or closing opening.
If you want to draw hole in your surface you have to use RETR_TREE insted instead of CV_RETR_EXTERNAL in findContours
About hierarchy : Original image is :
Contourr Contours with hiereachy hierarchy are
0 = [-1, -1, 1, -1] // contour 0 :-1 no next contour,-1 no previous contour, 1 contour #1 is a child, -1 no parent contour
1 = [3, -1, 2, 0] // contour 1 :-3 next contour,-1 no previous contour, 1 contour #2 is a child, 0 is parent contour
2 = [-1, -1, -1, 1]
3 = [-1, 1, -1, 0]
program is :
Mat img = imread("C:/Users/Laurent.PC-LAURENT-VISI/Desktop/14887743804853655.jpg", CV_LOAD_IMAGE_GRAYSCALE);
imshow("original", img);
Mat y;
threshold(img, y, 50, 255, THRESH_BINARY);
imshow("threshold", y);
double ccMin, ccMax;
findContours(y, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
Mat c = Mat::zeros(img.size(), CV_8U);
for (int i = 0; i <contours.size(); i++)
{
cout<<i<<" = "<<hierarchy[i]<<"\n";
}
for (int i = 0; i <contours.size(); i++)
{
drawContours(c, contours, i, Scalar(255), 1, LINE_8, hierarchy, 0);
putText(c,format("%d",i),contours[i][0], FONT_HERSHEY_SIMPLEX,0.5,Scalar(255));
}
imshow("ctr",c);
imwrite("c.png",c);
waitKey(0);