python - opencv 2.4.9 中 findcontour 函数返回的值是什么

标签 python opencv

我使用的是 openCV 2.4.9 版本,我所指的代码具有以下行: im2,contours,hier=cv2.findContours(im_th.copy(),cv2.RETR_EXTERNAL,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

我不断收到错误消息:“ValuesError:需要超过 2 个值才能解包” 我知道 2.4.9 版 openCV 中的 findContour 仅返回两个值。但这些值(value)观是什么?

最佳答案

在这个函数的三参数版本中,它返回额外的“im2”参数。我将简要介绍轮廓和层次结构返回,因为它们有据可查。这两个返回值取决于传入的两个常量。它们是下面的变体。

Contours 是一个列表,或点列表的树。这些点描述了每个轮廓,即一个矢量,可以根据它与背景的不同绘制为形状各部分周围的轮廓。

层次结构显示形状如何相互关联,层本身 - 如果形状彼此重叠,则可以在此处确定。

试验 im2 返回值

文档位于 https://docs.opencv.org/3.3.1/d4/d73/tutorial_py_contours_begin.html建议 im2 是修改后的图像。我对这个返回值很感兴趣,因为文档并没有真正告诉我它的作用或用途。

实际实验显示没有区别。 我的代码:

import cv2

im = cv2.imread('shapes_and_colors.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.imwrite("gray.jpg", imgray)
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
cv2.imwrite("thresh.jpg", thresh)
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.imwrite("contour.jpg", im2)

Shapes and colors 是来自 pyimagesearch 的测试图像:

The original image

这变成了灰度以对其进行阈值处理:

Image converted to greyscale

然后我应用一个阈值,得到一个二值图像:

enter image description here

最后我运行 findcontours - 并将“im2”参数写入图像:

enter image description here

没有明显的区别。也许复杂的图像差异算法可以找到我找不到的东西。我意识到这些是有损的 JPG,这可能会混淆。 到目前为止,我看不出 im2 返回值有多大用处,但轮廓和层次结构绝对有用。

我会说我希望看到类似 drawcontours 的东西 - 但该二进制图像中只有一个 channel ,所以即使它有,我也不相信我能够看到它。您不能在其正常模式下将其应用于 32 位图像。我还发现在没有阈值处理的情况下,灰度图像没有明显差异。

关于python - opencv 2.4.9 中 findcontour 函数返回的值是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46236061/

相关文章:

python - 用opencv提取最大的blob

php - Opencv 网络应用程序

python - 使用 OpenCV 进行对象跟踪

python - np.ones 更改为元组并且 np.asarray 没有修复它

android - Android 与 OpenCV 3.4.0 和 NDK 的链接错误

python - 一个非常简单的正则表达式的问题

python - setup.py 的库路径?

python - 多部分/混合电子邮件附件未显示,但仅在 Windows 10 邮件中显示

python - 将多个文件中的所有列合并为一个(在一行中!)

python - Bokeh 多选小部件回调不起作用