1

我在opencv中遇到了轮廓问题,主要是它们的处理方式。参考看看这个教程:

http://docs.opencv.org/doc/tutorials/imgproc/shapeescriptors/moments/moments.html#moments

让我暂停的部分是当我尝试与他们声明的轮廓对象交互时,我无法弄清楚如何在不破坏所有内容的情况下从集合中删除项目。教程中的对象声明包含在下面未单击它的那些人中。

vector<vector<Point> > contours;
vector<Vec4i> hierarchy;

现在,我可能在 opencv 文档的某个地方错过了这一点,但是如何安全地从返回的轮廓列表中删除轮廓?

安全我的意思是我尝试了一个简单的

contours.erase(contours.begin()+15);

这会导致与它一起返回的层次结构项目出现运行时问题,但是当我包含

hierarchy.erase(hierarchy.begin()+15);

我丢失了不止一个轮廓,所以对于如何从返回给我的集合中删除单个轮廓感到不知所措。

编辑:

根据我得到的响应,我怎样才能让 OpenCV 返回一系列轮廓,我可以轻松地从中删除不必要的轮廓?干杯

4

1 回答 1

0

如果您使用层次结构,则删除轮廓的最佳方法是将层次结构中的某个值设置为某个标记值。

因此,您通过遍历层次结构来遍历所有轮廓,如果需要“删除”轮廓,则将层次结构中的索引设置为 0(或-1)或其他值。

如果您选择此选项,请记住层次结构也有子轮廓。

于 2013-05-03T23:18:57.110 回答