首页 > 解决方案 > 视频运行几帧然后给出错误

问题描述

我正在研究 raspberry pi3 model b+ 我在我的 raspberry pi 上安装了 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) 不起作用

标签: python-3.xopencvraspberry-pi

解决方案


cam.read()在继续处理之前,您应该检查两者的 ret_val 是否同时为真。因此,当一个帧没有被正确抓取时,它会被丢弃并重试该过程,而不是抛出错误并退出。

这在技术上并不能解决错误,但它确实解决了您的问题,前提是生成的帧速率足以满足您的应用程序。


推荐阅读