问题标签 [opencv-contour]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
579 浏览

c++ - Opencv findContours 在特定项目中得到错误的结果

我已经使用 opencv findContours的示例代码来获取轮廓。

成功获得此图像的正确轮廓。

但是当我在我的项目中使用 findContours 时,它得到了错误的轮廓数据,例如轮廓有 0 点,轮廓向量中有数百万个点,有些点是巨大的数字。

我的项目列表中的测试代码如下:

是错误轮廓数据的图像。

这是正确的轮廓数据

我已经重新创建了我的项目,但问题仍然存在。

我怎么解决这个问题?

更新:

当我将路径“/”更改为“\”并制作 CV_RGB2GRAY 而不是 CV_BGR2GRAY 时,这也是错误的。

下面是灰色和精明输出列表的图像。

原文:i.imgur.com/KXB6OAS.png

灰色:i.imgur.com/y1prHnj.png

精明的输出:i.imgur.com/UtUzRkh.png

比较:i.imgur.com/lLZ8OBj.jpg

我在我的项目中使用该库:FLTK、openGL(freeglut、glew)、LinearSystemLib 2005、opencv211 和我编译的 gpu。findcontours 示例代码 opencv 网站是使用我项目中的相同 opencv 库构建的。

0 投票
0 回答
7018 浏览

c++ - 了解层次结构,来自 findContours opencv

我试图从 opencv c++ 中理解 Hierarchy 和 findContours,但我发现它很难。

我确实在这里解决了这个问题,但我仍然无法清楚地得到它。我尝试在不同的示例中使用它,使用下面的示例图像

在此处输入图像描述

对于上图,运行以下代码,

我为上面的层次结构图像得到的输出如下

根据here的描述,有7个轮廓。当我在图像中只看到 2 个时,我不明白这怎么可能。一个外部轮廓和另一个被另一个包围的内部轮廓。

其次,数字 6、5、3 代表什么?通过阅读描述,我无法理解底层逻辑。如果有人可以解释这一点,那将非常有帮助。

为了消除疑虑,我尝试了各种图像类型。下面是另一个

在此处输入图像描述

答案是

现在我们有 3 个轮廓,而实际上只有一个,肉眼可见。

最后,尝试了最坏的情况,

在此处输入图像描述

而输出,

我知道我显然缺少一些逻辑。如果有人可以解释,那将有很大帮助。

我正在尝试根据某个阈值将轮廓分割为大、中和小。我被困在这里,因为我正在尝试计算轮廓的面积,但无法完全理解它。

我可以推断出的几件事是可能为每个可能的单个轮廓绘制了两个轮廓区域。一个是边界,另一个是内部的孔或空间。是这样的吗?

尽管如此,层次结构的数字仍然让我感到困惑。

任何帮助将非常感激。提前致谢 :)。

0 投票
0 回答
636 浏览

c++ - 扩展活动轮廓opencv-snakeimage

我正在做一些图像处理,需要我使用活动轮廓来找到一些边缘。所需的输出如下图所示:

http://i.stack.imgur.com/sS7sw.png

我所拥有的是:

http://i.stack.imgur.com/OOo4x.png

我以为我可以使用 opencv snakeImage 但现在这是遗留问题,我不知道如何实现这个旧代码。文档也很少,也没有示例。这使问题对我来说非常困难。

在这种情况下还有其他有用的技术吗?我很困。

0 投票
1 回答
1524 浏览

opencv - OpenCV - 如何确定给定点是否在轮廓内?

给定一个随机轮廓,我怎么能说给定的输入点是否在轮廓内?如果它有一个简单的解决方案,我很抱歉,但我无法弄清楚。

我的一个想法是使用直线方程,连接点并查看它是更大还是更小,等等。但这并没有让我走到任何地方,因为它取决于线的位置。

0 投票
1 回答
5050 浏览

c++ - opencv:在矩形检测中使用轮廓和霍夫变换

我正在尝试使用不同的方法检测灰度图像中的白色矩形:轮廓检测和霍夫变换。不幸的是,我正在处理的图像有一些限制,即

  1. 图像中有很多特征,矩形不是唯一的特征
  2. 矩形可以合并到其他特征(例如,矩形边缘之一可以与一条长直线重叠)
  3. 矩形可以包含一些其他特征(例如矩形内的字母、数字或一些徽标)
  4. 有一些特征看起来像矩形(例如字符'D'看起来像一个在右上角和右下角有小弧的矩形;另一个例子是梯形而不是平行四边形)
  5. 矩形可以顺时针和逆时针旋转 0 到 15 度
  6. 在不同的照明条件下(例如 1 个像素间隙),线条可能会被分成几条线,因此过滤线条的最小线条长度必须很小(例如在 Hough 变换中)
  7. 当最小线长设置为较小的值时,更常见的是同一条线在不同方向看到重复线(即需要合并几条线)

对于轮廓方法,一些图像的轮廓被破坏了。此外,图像可以包含矩形等特征(例如字符“D”)。我不确定这是否是一个好方法。

我看到很多文章/论坛建议使用霍夫变换来检测矩形,如下面的帖子。不幸的是,我必须设置最小行长度的小值并且看到重复的行。我不知道如何处理上面提到的点(例如,结合所有重复的线并为每个边缘只选择一条线,如何区分大部分是线但带有像“D”这样的小弧线的特征,以及如何隔离一个边与一条长直线合并的正方形等)。

使用透视投影进行矩形识别的霍夫变换与轮廓检测

欢迎任何建议!

编辑:添加一些图片

字符 D

字符 D

矩形边缘与长直线合并

带徽标的矩形,边缘与长直线合并

在此处输入图像描述

梯形(顶部有阴影,底部形成梯形)

0 投票
1 回答
394 浏览

opencv - 指尖检测

我正在尝试计算图像中手的姿势。所以,我从图像中提取了手。为了从手上提取指尖,我使用了convexHull()。我收到此错误“点不是 numpy 数组,也不是标量”。

这是代码:

0 投票
1 回答
928 浏览

opencv - 寻找 Homography v/s 轮廓检测

问题是检测图像中的已知矩形对象。以下哪项计算成本较低:

  1. 寻找单应性——为了寻找单应性,我们使用已知对象的模板进行特征匹配。
  2. 轮廓检测 - 我们尝试检测图像中最大的轮廓。在这种特殊情况下,我们假设最大的轮廓将对应于我们试图找到的已知矩形对象。

在这两种情况下,我们都会在检测到对象以设置透视后进行透视变换。

注意:我们使用 Open-CV 函数来查找单应性和检测轮廓。

0 投票
0 回答
97 浏览

opencv - 识别椭圆的形状 OpenCV

我以椭圆的形式使用 Opencv,我想将垂直椭圆和水平椭圆分开。

你知道我该怎么做吗?

0 投票
1 回答
3363 浏览

python - OpenCV findContours 只找到图像的边框

我正在做一个项目来跟踪激光和光电二极管,并将相机连接到树莓派上。pi 将向 arduino 发送指令,它将重新定向激光,直到我得到光电二极管的响应。现在,我正在研究这个过程的相机方面。

我试图找到我的图像的轮廓,以便我可以将它们与我将使用的对象的一般轮廓相匹配,但我的 findContours() 只给了我图像的边框。

我希望我可以发布图像,但我没有足够的代表。Canny Edge 是黑色和白色的,带有黑色背景的白色线条。带有轮廓的图像是捕获的图像,但带有绘制的边框,没有其他轮廓。

这是我的代码:

编辑:这是两张照片 http://imgur.com/EVeMVdm,QLoYa2o#0 http://imgur.com/EVeMVdm,QLoYa2o#1

0 投票
1 回答
3822 浏览

c++ - FindContour:测量轮廓之间的距离

我将非常感谢在帖子中进一步了解:寻找轮廓之间的最小距离

我正在使用 FindContours 并根据需要获取多个轮廓。问题是我想找到每个相邻对之间的最小距离,例如黄色轮廓和深绿色之间、深绿色和青色之间、青色和紫色之间。

我从上面的帖子中理解了一般方法。但是谁能告诉我如何一个接一个地选择它们(自动)?

在此处输入图像描述