cv2.cvt颜色错误.是虫子吗



我需要使用一些运动检测代码,然后我使用以下代码,由该链接提供:http://www.steinm.com/blog/motion-detection-webcam-python-opencv-differential-images/。这是代码:

import cv2
def diffImg(t0, t1, t2):
    d1 = cv2.absdiff(t2, t1)
    d2 = cv2.absdiff(t1, t0)
    return cv2.bitwise_and(d1, d2)
cam = cv2.VideoCapture(0)

winName = "Movement Indicator"
cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE)
# Read three images first:
t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
t = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
while True:
    cv2.imshow(winName, diffImg(t_minus, t, t_plus) )
    #diff = diffImg(t_minus, t, t_plus) 
    # Read next image
    t_minus = t
    t = t_plus
    t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
    #cv2.imshow(winName, diff)
    key = cv2.waitKey(10)
    if key == 27:
       cv2.destroyWindow(winName)
       break
print "Goodbye"

起初,它运行得很顺利,但现在,它给了我一个错误:

cv2.error:\opencv\modules\imgproc\src\color.cpp:337:函数cv::cvtColor 中的错误:(-215)scn==3||scn==4

我在stackoverflow中找到了各种解决方案,但仍然出现了错误。有人说,发生错误是因为源没有代码(函数调用中的第三个参数)指示的正确颜色格式。有人能告诉我错误发生的原因吗?或者是opencv错误,而且没有解决方案?

问题是t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)

# ^

当您访问BGR图像的[1]索引时,它不再是要使用cv2.COLOR_RGB2GRAY转换的彩色图像。相反,只需编写cam.read()。另外请注意,OpenCV默认情况下使用BGR,而不是RGB。

我也遇到了这个问题,在阅读了上面的答案后,我尝试了一下,但没有解决,最后我发现我的图像的路径是错误的,所以你最好先检查一下真实的路径。

相关内容

  • 没有找到相关文章

最新更新