【问题标题】:EMGU 3.0.0 OpenCV Insert and Remove Contour PointsEMGU 3.0.0 OpenCV 插入和删除轮廓点
【发布时间】:2016-06-08 06:16:15
【问题描述】:

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

Emgu 的 2.4.2 版本有一个 Contour 类: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 类有一个 PushBackPopBack 方法,它允许您在一个序列的结尾。但是,正如我之前的代码一样,我正在删除某些位置的元素(RemoveAt 方法允许您输入要删除的元素的索引 i)。

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

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

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

如果有任何帮助,我将不胜感激。提前致谢。

【问题讨论】:

  • 您究竟需要什么帮助? How to Ask您应该将相关代码添加到问题中,并为您正在使用的编程语言和相关库添加标签。

标签: c# emgucv


【解决方案1】:

要从 VectorOfPoint 中删除一个值,请使用 pop()(从向量末尾删除并检索该值), 没有“按索引删除”方法,但显然您可以使用 pop() 和 push() 构建自己的方法(插入到向量的末尾)。

【讨论】:

  • 所以查看 VectorOfPoint 类,我没有看到 Pop() 方法,而只是一个 Push() 方法:emgu.com/wiki/files/3.0.0/document/html/…我最好找到我的“好”点,然后创建一个新的 VectorOfPoint 对象,我只插入“好”点?
  • 列表点 = 新列表(vec.toArray()); points.removeAt(i)....points.add(x).... VectorOfPoints vec2 = new VectorOfPoints(points.toArray());
  • 您可以构建一个执行上述代码的函数,更好的是为您创建一个VectorOfPoint的扩展方法(一个第一个参数为“this VectorOfPoint”的静态方法。
猜你喜欢
  • 2015-10-23
  • 2020-06-14
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2016-09-25
  • 2022-01-23
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多