我需要使用一些运动检测代码,然后我使用下面的代码,由这个链接提供: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"
起初,它运行得很顺利,但现在,它给我带来了错误:
您可以使用以下命令来创建一个文件夹:错误:(-215)scn == 3||函数cv::cvt颜色中的scn == 4
我在stackoverflow中找到了各种解决方案,但仍然发生了错误。据说发生错误是因为源代码没有正确的颜色格式,而代码(函数调用中的第三个参数)指示它应该这样做。有人能给予我为什么会发生错误吗?或者是opencv bug,而没有解决方案?
2条答案
按热度按时间2exbekwf1#
问题是
t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
# ^
当您访问BGR图像的[1]索引时,它不再是要使用
cv2.COLOR_RGB2GRAY
进行转换的彩色图像。相反,只需写入cam.read()
即可。另外请注意,OpenCV默认使用BGR,而不是RGB。rhfm7lfc2#
我也遇到过这个问题,看了上面的答案后,我试了试,但没有解决,最后我发现我的图像路径是错误的,所以你最好先检查一下真实的的路径。