gpt4 book ai didi

c++ - OpenCV 2.4.4 中的轮廓/连接组件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:55 24 4
gpt4 key购买 nike

我目前正在处理具有大量检测到的轮廓的图像。
我的目标是缩小轮廓的数量,最终只得到我正在寻找的轮廓。
为此,我根据区域和边界框进行了一系列测试。

现在我在每一步之后都做一个 drawContours对于我想要保留的轮廓,后跟 findContours .

我的问题是我想做的findContours只有一次然后只是删除我不想要的轮廓,这可能吗?

当前方式:

Mat src;
Mat BW;
src = imread("img.bmp", 0);
if( src.channels() > 1)
{
cvtColor(src, src, CV_BGR2GRAY);
}

threshold(src, BW, 100, 255, CV_THRESH_OTSU);
imshow( "Tresh", BW );

Mat dst = Mat::zeros(src.rows, src.cols, CV_8UC3);
Mat dstP = Mat::zeros(src.rows, src.cols, CV_8UC3);
Mat dst1 = Mat::zeros(src.rows, src.cols, CV_8UC3);
Mat dst2 = Mat::zeros(src.rows, src.cols, CV_8UC3);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;

findContours( BW, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );
for( int i = 0; i < contours.size(); i++ )
{
Scalar color( rand()&255, rand()&255, rand()&255 );
drawContours( dst, contours, i, color, 2/*CV_FILLED*/, 8, hierarchy );
}

/// Test on area ******************************************************************
for( int i = 0; i < contours.size(); i++ )
{
if ( contourArea(contours[i], false) > 100 && contourArea(contours[i], false) < 200000)
{
Scalar color( rand()&255, rand()&255, rand()&255 );
drawContours( dst1, contours, i, color, CV_FILLED, 8, hierarchy );
}
}

/// Next test **********************************************************************
cvtColor(dst1, dstP, CV_BGR2GRAY);
findContours( dstP, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );

等等

想要的方式:
if ( contourArea(contours[i], false) < 100 && contourArea(contours[i], false) > 200000)
{
contours.erase(i); // Doesn't work
}

有谁现在如何删除这些轮廓?

PS:我不关心内部轮廓,我希望所有这些都通过我的测试。

编辑 ,解决方案(由 limonana 指出)是: contours.erase(contours.begin()+i);

最佳答案

也许是因为您没有按应有的方式使用删除。它应该得到一个迭代器。
http://www.cplusplus.com/reference/vector/vector/erase/

关于c++ - OpenCV 2.4.4 中的轮廓/连接组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15244117/

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