问题标签 [opencv-drawcontour]

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 投票
5 回答
5989 浏览

python - cv2.drawContours() - 取消填充字符内的圆圈(Python,OpenCV)

正如@Silencer 所建议的,我使用他在此处发布的代码在我的图像中的数字周围绘制轮廓。在某些时候,使用数字就像0,6,8,9我看到它们的内部轮廓(圆圈)也被填充了。我怎样才能防止这种情况?是否为 cv2.drawContours() 设置最小/最大动作区域,以便我可以排除内部区域?

例子

我试图通过cv2.RETR_EXTERNAL,但使用这个参数只考虑整个外部区域。

代码是这样的(再次感谢 Silencer。几个月来一直在寻找这个..):

我正在处理的主要图像..

源代码

谢谢

更新

我在下面实现了 Fiver 答案,结果如下:

0 投票
0 回答
1887 浏览

c++ - 使用 OpenCV 在 C++ 中绘制对象的轮廓

我想实现测量对象的大小(如最后附加的图像),还需要使用 OpenCV 框架在 iOS 应用程序中计算对象的高度和宽度。

成功集成 CvVideoCamera 并能够启动视频

现在问题出现在“processImage”方法中。

我试过的:

结果:

在此处输入图像描述

需要达到的目标:(已编辑)

正如 GPPK 在评论用 C++测量对象中提到的链接。

老实说,我不知道 c++,但我尽我所能,但在不深入了解的情况下努力前进。如果有人可以提供帮助,那将是非常可观的。在此先感谢。

0 投票
1 回答
57 浏览

python - 如何在 if 语句中收集元组值?

我有一个由循环if语句组成的代码,如下所示,for

运行此代码时,结果如下;

但是,start_target_states变量必须按照start_state第一个结果命名,之后,它必须按照target_state第二个结果命名。例如;

此外,我想将这两个元组分配给变量名。这样我以后可以使用它们。我的意思是,

我试图修改 if 语句以达到我的目的,不幸的是我无法成功。我怎样才能做我想做的事?

0 投票
1 回答
1408 浏览

python - OpenCV Python:语音气泡形状的闭合轮廓近似

我有一个像讲话泡泡的形状。我只想检测这种形状的椭圆,就像图像中绿色环绕的椭圆一样。

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

我尝试了封闭形态,但气泡的某些部分也被去除了。我使用了一个矩阵为 20、20 的内核。形状变得更加矩形。也许我必须像这样更改内核矩阵:

我也尝试画一个凸包,但它也没有效果。并且内凸包是不可能的。这是我绘制凸包的代码:

我用参数cv2.RETR_EXTERNALcv2.CHAIN_APPROX_NONE

0 投票
1 回答
551 浏览

java - OpenCV - 删除错误的轮廓

我有一个关于 OpenCV 和寻找特定形状的简短问题。在我的电脑上,我有一些形状的图片,但我只想要矩形的轮廓:

输入文件: 输入文件:

我的输出应该是: 我的输出应该是什么

我的输出实际上是: 我的输出实际上是什么


我做了什么:

  1. 打开我的图像并将其转换为 OpenCV Mat。
  2. 做了一些图像处理[灰度,模糊]
  3. 发现与 Canny 的边缘
  4. 用“findContours”找到轮廓
  5. 用“boundingRect”在我的轮廓周围绘制矩形

这就是我坚持的地方。我不知道如何消除错误的轮廓。我尝试迭代我的轮廓并删除不正确的轮廓。但我不知道如何找到错误的轮廓。有没有我必须使用的公式或某事。像这样?我发现了一些带有“arcLength”的东西,但我不明白这一点。


这是我的代码:


这个项目的重点是什么:

我有一个 IP 摄像机流式传输视频。在这个项目中,我想在流中找到所有二维码,裁剪它们并将它们传递给解码器(例如 ZXing)。我只用 ZXing 试过这个,但我在角度、尺寸等方面遇到了问题。这就是为什么我想使用 OpenCV 来查找代码并操纵它们来减少从 IP 摄像机到解码器的流量,并(也许)增加命中率。

二维码样本: 二维码样本

这应该是我的输出: 这应该是我的输出

这是我的输出: 这是我的输出


非常感谢你的帮助。

0 投票
2 回答
1144 浏览

c++ - C ++ Open CV为相同形状的轮廓绘制一种颜色

我在使用图像时刻的地方有这段代码。我想为每个轮廓形状绘制一次颜色。现在,如果我有五个三角形,所有这些都是用不同的颜色绘制的。我想做的只是一种将形状彼此分开的方法,用相同的颜色绘制它们。

0 投票
1 回答
671 浏览

python - 在不同位置绘制轮廓

我想在空白图像的中间绘制轮廓。我不知道如何设置要绘制的轮廓位置。这是我使用的线。

bimg 是空白图像, c 是我从图像中提取的轮廓。我相信我可以通过操纵c来移动轮廓,但我不明白c实际上是如何写的

0 投票
2 回答
2918 浏览

c++ - 如何在 OpenCV 中获得扩展或收缩的轮廓?

是否可以获得轮廓的扩展或收缩版本?

例如,在下图中,我在二值图像上使用了 cv::findContour() 和 cv::drawContour 来获取轮廓:

伊姆古尔

我想绘制另一个与原始轮廓有自定义像素距离的轮廓,如下所示:

伊姆古尔

伊姆古尔

除了腐蚀,我​​认为这可能不是一个好主意,因为使用腐蚀似乎很难控制像素距离,我不知道如何解决这个问题。我可以知道正确的方向吗?

0 投票
2 回答
5449 浏览

python - OpenCV 绘制轮廓错误断言失败

因此,我正在尝试遵循有关如何在 https://www.pyimagesearch.com/2014/09/01/build-kick-ass-mobile-document-scanner-just-5-minutes/ 中扫描文档 的指南在我应该找到轮廓并将其绘制到图像的第 2 步过程中,在 drawContour 函数上出现“断言失败”错误

导游没有

screenCnt = 无

所以起初我得到了错误,比如 screenCnt 不存在

在我添加它之后,即使我使用了与指南相同的图像并尝试了另一个图像,也得到了断言失败

这是我得到的:

Traceback(最近一次调用最后):文件“C:/Users/User/PycharmProjects/learn/project/app.py”,第 218 行,在 cv2.drawContours(image, [screenCnt], -1, (0, 255, 0), 2)

cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2606: error: (-215:Assertion failed) reader.ptr != NULL in function 'cvDrawContours'

有什么解决方案吗?之前谢谢

0 投票
1 回答
3435 浏览

python-3.x - 查找轮廓内图像的平均像素强度值

我在图像中找到了特定的轮廓。我创建了一个蒙版,除了轮廓的边界点外,整个图像都是黑色的。轮廓已完美映射。单击此处查看创建的轮廓的图片。

现在我想去我的原始图像并获取原始图像的这个轮廓内所有点的平均像素强度值。当我使用 cv.mean() 函数时,我是否只获得掩码指定的点的平均值,即只是边界点或掩码内的所有点?