问题标签 [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 投票
1 回答
529 浏览

c++ - 使用 cv::findContours 从二进制掩码中查找最大区域对象失败,因为轮廓未闭合。如何预防?

我正在尝试根据视频源的形状特征(例如:面积、轮廓长度等)在视频源中执行暗(几乎是黑色)对象检测,但我在检测二进制掩码中的轮廓时遇到问题。

有时即使对象没有改变形状并且轮廓是从仅包含一个紧凑 blob 的简单蒙版派生的,轮廓也没有关闭(我可以看出,因为我使用 CV_FILLED 选项显示它,并且对于许多帧轮廓已填充),并且由于该计算区域实际上不可信(值降低到几个像素)。

我还注意到,当对象的轮廓未闭合时,长度大约是预期的 2 倍(这是有道理的)。

为什么简单斑点的轮廓有时会打开有时会关闭,我如何强制它们始终关闭?我已经尝试过凸包,并将轮廓的第一个点复制到它的末端,但它没有用。

我的方法的步骤如下:

  1. 将图像转换为灰度
  2. 执行阈值化、腐蚀和膨胀以消除噪声并改善“形状”
  3. 使用 Canny 边缘检测器只得到边缘
  4. 使用 findContours 获取等高线及其区域:
  5. 使用 arcLength 计算等高线和其他特征的长度。
0 投票
3 回答
4446 浏览

opencv - 在嘈杂的背景中难以检测小物体。有什么办法可以解决这个问题?

我正在尝试制作一个计算机视觉程序,它可以在海滩等嘈杂的背景中检测垃圾和随机垃圾(由于沙子而嘈杂)。

原图:

在此处输入图像描述

无需任何图像处理的 Canny 边缘检测:

在此处输入图像描述

我意识到图像处理技术的某种组合将帮助我完成我的目标,即忽略嘈杂的沙地背景并检测地面上的所有垃圾和物体。

我试图进行中值模糊,调整参数,它给了我这个:

在此处输入图像描述

它在忽略沙地背景方面表现良好,但它无法检测到地面上的其他许多物体,可能是因为它被模糊了(不太确定)。

有什么方法可以改进我的算法或图像处理技术,从而忽略嘈杂的沙地背景,同时允许精巧的边缘检测找到所有对象并让程序检测并在所有对象上绘制轮廓。

代码:

0 投票
2 回答
983 浏览

opencv - Contour.exe中的Opencv未处理的异常

我在OpenCV中的代码运行良好,直到我想找到轮廓

然后我不断收到以下错误:

“Contour.exe 中 0x773e3e28 处未处理的异常:Microsoft C++ 异常:cv::Exception at memory location 0x002ff3ac..”

您对此错误有任何想法吗?

我的完整代码如下。

谢谢

0 投票
1 回答
4020 浏览

python - Getting error "FindContours support only 8uC1 and 32sC1 images in function cvStartFindContours"

I am trying to preform image processing techniques such as histogram backprojection and morphological filtering, but whenever I try to find a contour on the processed image, it keeps giving me an error:

I tried to find multiple ways to convert my processed image into either a 8uC1 or 32sC1, but have failed. Can anyone tell me how do I convert the image into a type 8uC1 or type 32sC1 so that I can find contours within the image?

Code:

0 投票
3 回答
2564 浏览

c++ - 如何检测与 C++ 和 OpenCV 的轮廓自相交?

我需要在自相交上测试轮廓,但我不知道它是如何实现的。或者我如何在 cv::Mat 中只检测没有自相交的轮廓?

在此处输入图像描述

前任 左轮廓必须匹配,右轮廓不匹配

0 投票
1 回答
691 浏览

c++ - findContours:OpenCV 已触发断点

我正在尝试在 OpenCV 中使用 findContours。当我调试我的程序时,一切正常,直到

我收到消息:

OpenCVFirst.exe 已触发断点

我已经读到这可能是因为链接了错误的 OpenCV 文件,但我最后将正确的文件与 d (用于调试)链接。

我的代码就像在官方 OpenCV 示例中一样:http: //docs.opencv.org/doc/tutorials/imgproc/shapeescriptors/find_contours/find_contours.html

我在带有 Windows 10 的 Visual Studio 2015 中使用 OpenCV 3.0。

0 投票
1 回答
343 浏览

c++ - OpenCV 将轮廓设置为 0

我正在使用 C++ 中的 OpenCV 进行编码。我从方法中得到

查找轮廓()

存储在“轮廓”中的值;数据类型是向量>。我想将轮廓 [i] 设置为 0; contours[i]=0不起作用,因为它需要一个点向量的向量而不是整数。有谁知道我如何“清除”它?谢谢!

0 投票
3 回答
30523 浏览

python - 在 Python 中使用 OpenCV 访问轮廓边界内的像素值

我在 Python 2.7.9 上使用 OpenCV 3.0.0。我正在尝试跟踪具有静止背景的视频中的对象,并估计它的一些属性。由于图像中可能有多个移动对象,我希望能够区分它们并在视频的剩余帧中单独跟踪它们。

我认为可以做到这一点的一种方法是将图像转换为二进制,获取 blob 的轮廓(在本例中为被跟踪对象)并获取对象边界的坐标。然后我可以转到灰度图像中的这些边界坐标,获取由该边界包围的像素强度,并在其他帧中跟踪此颜色渐变/像素强度。这样,我可以将两个对象彼此分开,因此它们不会被视为下一帧中的新对象。

我有轮廓边界坐标,但我不知道如何检索该边界内的像素强度。有人可以帮我吗?

谢谢!

0 投票
2 回答
931 浏览

c++ - 如何绘制每个分割对象的轮廓

我应用分水岭分割来检测触摸物体,这样做效果很好。现在,我想画出每个物体的轮廓,这样我就可以得到它们的长度、面积、矩等。但是分割结果中的物体仍然是感人的。所以,我没有画出每一个的轮廓。如何绘制每个对象的轮廓?

源图像: 在此处输入图像描述

分水岭结果: 在此处输入图像描述

0 投票
1 回答
206 浏览

python - 使用 cv2 库在 python 中遍历轮廓的问题

我正在设计一种算法,我必须遍历图像中的每个轮廓并对其应用条件。我正在使用 cv2 库来执行此操作。代码如下:

错误是: