Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV';从IP摄像头馈电时,s视频捕获出现故障_Python_Opencv_Video Capture_Rtsp_Ip Camera - Fatal编程技术网

Python OpenCV';从IP摄像头馈电时,s视频捕获出现故障

Python OpenCV';从IP摄像头馈电时,s视频捕获出现故障,python,opencv,video-capture,rtsp,ip-camera,Python,Opencv,Video Capture,Rtsp,Ip Camera,我只是想通过OpenCV的简单代码来阅读IP摄像机直播流,如下所示: import numpy as np import cv2 src = 'rtsp://id:pass@xx.xx.xx.xx' cap = cv2.VideoCapture(src) while(True): # Capture frame-by-frame ret, frame = cap.read() # Our operations on the frame come here

我只是想通过OpenCV的简单代码来阅读IP摄像机直播流,如下所示:

import numpy as np
import cv2

src = 'rtsp://id:pass@xx.xx.xx.xx'

cap = cv2.VideoCapture(src)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
这里的问题是,有时它通过显示正在运行的实时视频来发挥魅力,但有时它会创建大量空白窗口,这些窗口会一直弹出,直到作业被终止。如下图所示:


为什么会发生这种情况,以及我们如何避免这种情况?

也许您应该介绍视频捕获无法建立健康流的情况

请注意,在某些情况下,即使打开视频捕获,也可能不接收帧。这可能是由于各种原因造成的,如网络流量拥挤、计算资源不足、某些IP摄像头的节能模式

因此,我建议您检查帧大小,并确保您的视频捕获对象以正确的形状接收帧。(您可以调试并查看可视帧的大小,以了解相机的预期分辨率。)

在循环中进行如下更改可能会有所帮助

min_expected_frame_size = [some integer]
while(cap.isOpened()):
    ret, frame = cap.read()
    
    width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
    
    if ret==True and ((width*height) >= min_expected_frame_size):    
        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

添加部分代码后,问题仍然存在。猜猜根本原因是什么?这意味着,有时它工作,有时不工作,并弹出多个空白窗口。我观察到,当从网络摄像头馈送时,这个问题是不可复制的,只发生在实时IP摄像头上。你能检查正常流中的帧大小吗?相机可能会打开,但一些空帧正在流式传输,因此在显示图像之前,您可能还需要检查该情况。请参阅更新的答案。如何制定健康的框架尺寸?