为啥在调用摄像头检测时连通域信息统计就会出错!

静态图像处理可以跑这段程序,调用摄像头就不行啦!

img


执行到此处就按报错了!

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/350199
  • 你也可以参考下这篇文章:数字图像处理实验一 实现一个在视频叠加字幕的程序。鼠标点击屏幕,关闭或打开字幕
  • 您还可以看一下 张传波老师的软件设计是怎样炼成的?课程中的 采用更进取的设计策略,打造工作流引擎!小节, 巩固相关知识点
  • 除此之外, 这篇博客: 给你的树莓派部署一个车牌识别系统中的 树莓派实现车牌识别! 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    问题原因:

    根据报错信息,问题出现在 findContours 函数上。这个函数接受的第一个参数是二值图像,但是你传入的是一个彩色图像,所以会报错。

    解决方法:

    1. 首先,将输入的彩色图像转换为灰度图像。可以使用 cv2.cvtColor 函数来实现。

    python gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    1. 然后,将灰度图像进行阈值处理,得到二值图像。可以使用 cv2.threshold 函数来实现。

    python ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

    1. 最后,将得到的二值图像作为参数传入 findContours 函数。

    python contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    完成以上步骤后,你的代码应该可以正常运行了。

    完整代码示例:

    import cv2
    
    cap = cv2.VideoCapture(0)
    
    while True:
        ret, frame = cap.read()
    
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    
        contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
        cv2.drawContours(frame, contours, -1, (0, 255, 0), 3)
    
        cv2.imshow('frame', frame)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    cap.release()
    cv2.destroyAllWindows()
    

    请注意,以上代码是基于 OpenCV 3.x 的版本,如果你使用的是其他版本,请根据具体情况进行调整。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

img


错误提示你了啊,通道不对,也就是输入图片要为单通道的数据,你自己在调用之前检查一下连通域函数输入图片的通道是不是单通道的就知道啥问题了。