import cv2
if __name__ == '__main__':
img = cv2.imread("G:\\1.jpg") # 读取图像
cv2.imshow('img', img)
imag = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转为灰度值图(图像,方法)
# 转为二值图,(传入图片,设置阈值,设置正反),Binary:二值化后的图像
ret,Binary = cv2.threshold(imag, 30, 255, cv2.THRESH_BINARY)
# 寻找轮廓(二值化图像,寻找轮廓方法,存储拟合边缘方法)
contours, hierarchy = cv2.findContours(Binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img,contours,-1,(0,255,0),2) #画出轮廓边缘(原始图像,轮廓信息,编号,轮廓颜色,轮廓线宽)
cv2.imshow('img',img)
cv2.waitKey()
提取图片轮廓报错:cannot unpack non-iterable NoneType object
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- 凑热闹的小哥 2023-03-02 22:34关注
这个错误提示通常表示某个变量返回了None,而代码尝试对其进行解包操作。在这里,错误可能出现在 cv2.findContours 函数返回值上。因此,你需要检查 contours 和 hierarchy 变量是否被成功赋值。
在 OpenCV 的早期版本中,cv2.findContours 函数只返回轮廓信息,没有层级信息。如果你使用的是这样的版本,那么在赋值时,应该只获取一个返回值。在后续版本中,该函数返回一个元组,包含轮廓信息和层级信息,因此需要使用两个变量接收返回值。
你可以尝试使用下面的代码来检查问题:
import cv2 if __name__ == '__main__': img = cv2.imread("G:\\1.jpg") # 读取图像 cv2.imshow('img', img) imag = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转为灰度值图(图像,方法) ret, Binary = cv2.threshold(imag, 30, 255, cv2.THRESH_BINARY) # 寻找轮廓 contours, hierarchy = cv2.findContours(Binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) # 检查轮廓是否成功获取 if contours is not None: cv2.drawContours(img,contours,-1,(0,255,0),2) cv2.imshow('img',img) cv2.waitKey()
如果 contours 变量为 None,你需要尝试调整阈值或者调整 cv2.findContours 函数的参数,以便更好地识别轮廓。
解决 无用评论 打赏 举报
悬赏问题
- ¥30 模拟电路 logisim
- ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音
- ¥30 Pytorch深度学习服务器跑不通问题解决?
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Bug traq 数据包 大概什么价