我是Python和OpenCV的初学者。我正在尝试一段从网络摄像头获取输入图像的代码。以下是代码片段。
cam = create_capture(video_src, fallback='synth:bg=../cpp/lena.jpg:noise=0.05')
while True:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.equalizeHist(gray)
rects = detect(gray, cascade)
vis = img.copy()
draw_rects(vis, rects, (0, 255, 0))
for x1, y1, x2, y2 in rects:
roi = gray[y1:y2, x1:x2]
vis_roi = vis[y1:y2, x1:x2]
subrects = detect(roi.copy(), nested)
draw_rects(vis_roi, subrects, (255, 0, 0))
dt = clock() - t
draw_str(vis, (20, 20), 'time: %.1f ms' % (dt*1000))
cv2.imshow('facedetect', vis)
if 0xFF & cv2.waitKey(5) == 27:
break
cv2.setMouseCallback('facedetect',capture_image)
cv2.destroyAllWindows()
我同时使用Python 2.7和Python 3.4来执行此操作。在两个版本中都遇到了一个奇怪的问题。代码会出现一个断言错误,像这样:
OpenCV错误:在cv :: cvtColor的文件……\ opencv \ modules \ imgproc \ src \ color.cpp第3737行中断言失败(scn == 3 || scn == 4) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.error: ........\opencv\modules\imgproc\src\color.cpp:3737: error: (-215) scn == 3 || scn == 4在函数cv :: cvtColor中
但它仅在每次运行的每个ALTERNATE时间发生。可能是什么问题?我从其他帖子中了解到,当
cv2.cvtColor
尝试转换没有3或4个通道的空图像时,会发生此错误。通常情况下,这是因为指定了错误的路径。对于我的情况,由于每隔一段时间就可以正常工作,因此源应该不会有问题。请帮忙!!
img.dtype
。 - DrVwaitKey()
的参数可能太小了。如果相机在 5ms 内不能准备好新的帧,则可能返回空帧。请尝试传递更大的时间增量。 - Aureliuscam.read
的调用应该在新帧可用之前阻塞。 - DrV