OpenCV错误:imshow中的断言失败(size.width> 0 && size.height> 0)

Moh*_*man 0 python linux opencv

我在带有pi相机的Raspberry Pi上运行以下代码,我有它的broadcom驱动程序,但是我收到了一个错误.也许与视频源的尺寸有关,但我不知道如何在Linux上设置它.

码:

import cv2
import numpy as np

cap = cv2.VideoCapture()
while True:
    ret, img = cap.read()
    cv2.imshow('img', img)
    if cv2.waitKey(0) & 0xFF == ord('q):
        break
Run Code Online (Sandbox Code Playgroud)

错误:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, 
file /home/pi/opencv-3.3.0/modules/highgui/src/window.cpp, line 325
Traceback (most recent call last):
  File "check_picam_with_opencv.py", line 10, in <module>
    cv2.imshow('img', img)
cv2.error: /home/pi/opencv-3.3.0/modules/highgui/src/window.cpp:325: error: 
(-215) size.width>0 && size.height>0 in function imshow
Run Code Online (Sandbox Code Playgroud)

zin*_*rod 5

提供ID VideoCapture.

cap = cv2.VideoCapture(0)
Run Code Online (Sandbox Code Playgroud)

还要检查的价值ret,看它是否TRUEFALSE

print (ret)
Run Code Online (Sandbox Code Playgroud)

编辑:

要捕获视频,您需要创建一个VideoCapture对象.它的参数可以是设备索引或视频文件的名称.设备索引只是指定哪个摄像头的数量.

cap = cv2.VideoCapture(0)

要检查是否cap已初始化,可以使用cap.isOpened()函数,该函数返回True成功初始化和False失败.

if cap.isOpened() == False:
    print ("VideoCapture failed")
Run Code Online (Sandbox Code Playgroud)

cap.read()返回一个bool(True/False).如果正确读取帧,则它将为True.因此,您可以通过检查此返回值来检查视频的结尾.

ret, frame = cap.read()
if ret == False:
    print("Frame is empty")
Run Code Online (Sandbox Code Playgroud)

进一步阅读这里.