gpt4 book ai didi

c++ - OpenCV : findcontours() , 外部轮廓太多

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:13 26 4
gpt4 key购买 nike

我想找到苹果的所有轮廓,但是当我使用contours.size()时,轮廓的数量比苹果的数量多。

下面是用来找轮廓的图片和我在上面画轮廓的图片,以及程序的结果。

enter image description here

这是代码。

//Contours  
vector<vector<Point>> contours,hull;
vector<Vec4i> hierarchy;
RNG rng(12345);
findContours(con, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

cout<<"contours.size(): "<<contours.size()<<endl;
cout<<"hierarchy.size(): "<<hierarchy.size()<<endl;


//draw contours and calculate areas
int area[10];
int currentareaCounted = 0;

for(int i = 0; i<contours.size()-1; i++){

Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0, 255), 255);
drawContours(contoursImg, contours, i, color, 2, 8, hierarchy);

Mat drawingMatCount = cv::Mat::zeros(src_color.rows,src_color.cols, CV_8UC1);
drawContours(drawingMatCount, contours, i, 255, -1, 8);
currentareaCounted = countNonZero(drawingMatCount);

area[i]=currentareaCounted;


cout<<i<<"'th area "<<" : "<<currentareaCounted<<endl;
}

我很困惑为什么 contous.size() 是 7。它让我在我用来绘制轮廓的循环中使用 contours.size()-1,否则,程序会中断。

如果有人发现错误,希望告诉我。非常感谢。

最佳答案

首先,你必须找到boundRect,然后你可以像那段代码一样绘制Contours

for (int i = 0; i < validContours.size(); i++)
{
if (boundRect[i].area() < 50)continue;

rectangle(fin, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0);
}

关于c++ - OpenCV : findcontours() , 外部轮廓太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44154970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com