初阳一 2023-03-02 22:24 采纳率: 0%
浏览 180

提取图片轮廓报错:cannot unpack non-iterable NoneType object

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()

img

  • 写回答

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 函数的参数,以便更好地识别轮廓。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月2日

悬赏问题

  • ¥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 数据包 大概什么价