cv2.cvtColor错误。是bug吗?

时间:2014-10-11 09:35:46

标签: python-2.7 opencv motion-detection

我需要使用一些运动检测代码,然后使用此链接提供的以下代码: 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:3737:错误:(-215)scn == 3 ||函数cv :: cvtColor中的scn == 4

我在stackoverflow中找到了各种解决方案,但仍然发生了错误。有人说错误发生是因为源没有正确的颜色格式,代码(函数调用中的第三个参数)表明它应该。 任何人都可以给我一些想法,为什么会出现错误?或者是那个opencv bug而且没有解决方案呢?

2 个答案:

答案 0 :(得分:0)

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

# ^

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

答案 1 :(得分:0)

我也遇到了这个麻烦,在我读完上面的答案之后我试了但是还没有解决它,最后我发现我的图像的路径是错误的,所以你最好先检查真正的路径。