0

この投稿を読みましたが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();

binary_img ここに画像の説明を入力

UPDATE1cv::RETR_EXTERNALの代わりに 使用してcv::RETR_TREEいますが、本来よりもはるかに多くの等高線を返します。
ここに画像の説明を入力

4

1 に答える 1