EMGU 3.0.0 OpenCV插入和删除轮廓点

时间:2016-06-02 21:39:24

标签: c# emgucv

我最近尝试将我的Emgu库从2.4.2升级到3.0.0。因此版本发生了重大变化,我在修改代码以使其工作时遇到了一些麻烦。

Emgu的2.4.2版本有一个轮廓类:http://www.emgu.com/wiki/files/2.4.2/do ... Index.html

我的代码使用它,有时我使用RemoveAt方法删除点或使用Insert方法添加点。我的初始轮廓可能包含异常点(由于各种标准,如曲率,相邻点之间的距离等)。

我在新版本的Emgu中尝试做的是使用VectorOfPoint类。它适用于我的大部分代码,但它仍然没有(据我所知)任何等效的RemoveAt方法。它似乎有类似于Insert方法(Push方法:http://www.emgu.com/wiki/files/3.0.0/document/html/9f6838b0-d946-adc6-e14e-8f223079f5e3.htm),但我不确定它是否正是我想要的。

我进一步研究了这个问题,发现Mat类有一个 PushBack PopBack 方法,它允许你添加和删除一个元素。一个序列的结尾。但是,正如我之前的代码所示,我在某些地方删除元素( RemoveAt 方法允许您输入要删除的元素的索引i。)

例如,这是我之前使用RemoveAt方法的方式:

for (int i = nPoints - 1; i >= 0; i--)
                {
                    if (!goodPoint[i])
                    {
                        shapeContour.RemoveAt(i);
                        continue;
                    }
                }

我没有看到我可以在新版本的Emgu中使用的直接功能。我错了吗?

我将不胜感激任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

要从VectorOfPoint中删除值,请使用pop()(从向量的末尾删除并检索值), 这不是“通过索引删除”方法,但显然你可以使用pop()和push()(插入到向量的末尾)构建自己的方法。