Rev 3 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3 | Rev 5 | ||
|---|---|---|---|
| Line 30... | Line 30... | ||
| 30 | 30 | ||
| 31 | cv::namedWindow("Binary Image"); |
31 | cv::namedWindow("Binary Image"); |
| 32 | cv::imshow("Binary Image",image); |
32 | cv::imshow("Binary Image",image); |
| 33 | 33 | ||
| 34 | // Get the contours of the connected components
|
34 | // Get the contours of the connected components
|
| 35 | std::vector<std::vector<cv::Point>> contours; |
35 | std::vector<std::vector<cv::Point> > contours; |
| 36 | cv::findContours(image, |
36 | cv::findContours(image, |
| 37 | contours, // a vector of contours
|
37 | contours, // a vector of contours
|
| 38 | CV_RETR_EXTERNAL, // retrieve the external contours
|
38 | CV_RETR_EXTERNAL, // retrieve the external contours
|
| 39 | CV_CHAIN_APPROX_NONE); // retrieve all pixels of each contours |
39 | CV_CHAIN_APPROX_NONE); // retrieve all pixels of each contours |
| 40 | 40 | ||
| 41 | // Print contours' length
|
41 | // Print contours' length
|
| 42 | std::cout << "Contours: " << contours.size() << std::endl; |
42 | std::cout << "Contours: " << contours.size() << std::endl; |
| 43 | std::vector<std::vector<cv::Point>>::const_iterator itContours= contours.begin(); |
43 | std::vector<std::vector<cv::Point> >::const_iterator itContours= contours.begin(); |
| 44 | for ( ; itContours!=contours.end(); ++itContours) { |
44 | for ( ; itContours!=contours.end(); ++itContours) { |
| 45 | 45 | ||
| 46 | std::cout << "Size: " << itContours->size() << std::endl; |
46 | std::cout << "Size: " << itContours->size() << std::endl; |
| 47 | }
|
47 | }
|
| 48 | 48 | ||
| Line 57... | Line 57... | ||
| 57 | cv::imshow("Contours",result); |
57 | cv::imshow("Contours",result); |
| 58 | 58 | ||
| 59 | // Eliminate too short or too long contours
|
59 | // Eliminate too short or too long contours
|
| 60 | int cmin= 100; // minimum contour length |
60 | int cmin= 100; // minimum contour length |
| 61 | int cmax= 1000; // maximum contour length |
61 | int cmax= 1000; // maximum contour length |
| 62 | std::vector<std::vector<cv::Point>>::const_iterator itc= contours.begin(); |
62 | std::vector<std::vector<cv::Point> >::const_iterator itc= contours.begin(); |
| 63 | while (itc!=contours.end()) { |
63 | while (itc!=contours.end()) { |
| 64 | 64 | ||
| 65 | if (itc->size() < cmin || itc->size() > cmax) |
65 | if (itc->size() < cmin || itc->size() > cmax) |
| 66 | itc= contours.erase(itc); |
66 | itc= contours.erase(itc); |
| 67 | else
|
67 | else
|
| Line 164... | Line 164... | ||
| 164 | cv::namedWindow("All Contours"); |
164 | cv::namedWindow("All Contours"); |
| 165 | cv::imshow("All Contours",result); |
165 | cv::imshow("All Contours",result); |
| 166 | 166 | ||
| 167 | cv::waitKey(); |
167 | cv::waitKey(); |
| 168 | return 0; |
168 | return 0; |
| 169 | }
|
- | |
| 170 | 169 | }
|
|
| - | 170 | ||