我正在研究树莓派pi3 b +模型 我在树莓派上安装了opencv 3.4.4,并且安装正确。我只是运行基本代码以查看我的相机输出。 (我已经插入了两个摄像头)
这是代码。
import cv2
import time
def show_webcam(mirror=False):
frame_rate = 30
prev = 0
cam = cv2.VideoCapture(0)
cam1 = cv2.VideoCapture(1)
ff= 0.5
fxx = ff
fyy = ff
while True:
ret_val, img = cam.read()
img2 = cam1.read()[1]
time_elapsed = time.time() - prev
# print('data type of frame', type(img))
if time_elapsed > 1/frame_rate:
prev = time.time()
cv2.rectangle(img,(100,100),(500,500),(255,255,0),2)
small_frame = cv2.resize(img, (0, 0), fx=fxx, fy=fyy)
cv2.resize(img2,(0, 0), fx = fxx, fy = fyy)
#print("helo")
#if mirror:
# img = cv2.flip(img, 1)
cv2.imshow('my webcam', img)
cv2.imshow('my 2nd webcam', img2)
#if cv2.waitKey(1) == 27:
# break # esc to quit
if cv2.waitKey(1) == 27:
break
cv2.destroyAllWindows()
print (cam)
def main():
show_webcam(mirror=True)
if __name__ == '__main__':
main()
视频显示了几帧,但几秒钟后我出现了这个错误
select timeout
VIDIOC_DQBUF: Resource temporarily unavailable
Traceback (most recent call last):
File "camera.py", line 39, in <module>
main()
File "camera.py", line 36, in main
show_webcam(mirror=True)
File "camera.py", line 21, in show_webcam
small_frame = cv2.resize(img, (0, 0), fx=fxx, fy=fyy)
cv2.error: OpenCV(3.4.4) /home/pi/packaging/opencv-python/opencv/modules/imgproc/src/resize.cpp:3784: error: (-215:Assertion failed) !ssize.empty() in function 'resize'
当我在笔记本电脑上实现该代码时,该代码也可以正常工作。我该怎么办才能纠正此错误并确保视频不中断?
尝试执行cv2.waitKey(30)不起作用
答案 0 :(得分:0)
相同的代码在笔记本电脑上有效,但在pi上无效。这意味着您在较小的设备上遇到内存和/或CPU减少的问题。
尝试降低帧速率,以调整在较小的设备上可以使用的帧数。
答案 1 :(得分:0)
在继续处理之前,应同时检查两个cam.read()
的ret_val是否为true。因此,当未正确抓取框架时,将其丢弃并重试该过程,而不是抛出错误并退出。
从技术上讲,这并不能解决错误,但是可以解决您的问题,只要所得到的帧速率足以满足您的应用要求。
答案 2 :(得分:0)
为什么要使用time_elapsed变量,而只能使用waitkey函数并将要等待的毫秒数传递给它,即1000 / framePerSecond。关于您的错误,您尝试调整大小的框架为空,有时会发生这种情况。因此在进行任何图像处理之前,请尝试检查图像是否不为空,然后继续执行您想做的事情。