この投稿を読みましたがcv::threshold
、実際のバイナリ イメージを作成するために使用した後でも、まだ 500 ほどの輪郭が得られます。私は何を間違っていますか?
cv::findContours
明確な 13 個のブロブがあるため、13 個の輪郭のみを返すべきではありませんか?
Mat img = imread("img.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat img_thresh;
threshold(img, img_thresh, 0, 255, CV_THRESH_BINARY);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
cv::findContours(img_thresh, contours, hierarchy, RetrievalModes::RETR_TREE, ContourApproximationModes::CHAIN_APPROX_SIMPLE);
RNG rng(12345);
Mat drawing = Mat::zeros(img_thresh.size(), CV_8UC3);
for (int i = 0; i< contours.size(); i++)
{
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point());
}
imshow("drawing", drawing);
waitKey();
UPDATE1cv::RETR_EXTERNAL
の代わりに
使用してcv::RETR_TREE
いますが、本来よりもはるかに多くの等高線を返します。