当我一次读取 3 个或更多 rtsp 流时,OpenCV VideoCapture 出现灰屏

问题描述 投票:0回答:1

我正在 LAN 网络上读取 rtsp 流。当它是单个或 2 个流时,它运行平稳,但当我在 2 个以上的流上尝试它时,它开始给我一个灰色的屏幕,其中几乎没有可见的像素。

cap = cv2.VideoCapture(rtsp_uri)
cap.set(cv2.CAP_PROP_BUFFERSIZE, 2)

fps = cap.get(cv2.CAP_PROP_FPS)
delay_after_each_frame = 1/fps
print(delay_after_each_frame)

while True:
    try:
        ret, frame = cap.read()
    except:
        pass

    if self.stopper[camera_id]:
        del self.stopper[camera_id]
        return

    if not ret:
        continue

    frame = cv2.cvtColor(src=frame, code=cv2.COLOR_BGR2RGB)
    frame = cv2.resize(
        frame,
        (self.config.frame_width, self.config.frame_height)
    )
    queue.enqueue(frame)
    time.sleep(delay_after_each_frame)

这里我使用队列来存储帧,并且该脚本在线程中运行。

有什么方法可以让我一次读取来自多个摄像机的流而没有那些灰色帧。 这是我得到的框架。

用于多个流和输出的代码。

for camera_id in self.config.get_camera_ids():
    if camera_id not in self.threads:
        self.threads[camera_id] = Thread(
            target=self.process_rtsp_stream,
            args=(self.config.get_rtsp(camera_id),
                    self.queues[camera_id], camera_id)
        )
        self.threads[camera_id].daemon = True
        self.threads[camera_id].start()

# remove thread for deleted cameras
for camera_id in self.threads:
    if camera_id not in self.config.get_camera_ids():
        del self.threads[camera_id]
python opencv machine-learning computer-vision rtsp
1个回答
0
投票

对我来说也是一样,如果我有 2 个流,它会在快速变化时变灰。

我打算在python上改用pyAV或pyRTSP或FFMPEG来抓取帧

另一件事是获取图像,否则当您在 ffmpeg 上流式传输时,会像 PILL 一样从屏幕上抓取图像

© www.soinside.com 2019 - 2024. All rights reserved.