gpt4 book ai didi

python - 使用 FFMPEG 命令读取帧并使用 opencv 中的 inshow 函数显示

转载 作者:行者123 更新时间:2023-12-04 23:01:17 28 4
gpt4 key购买 nike

我正在尝试使用 ffmpeg 命令获取帧并使用 opencv 函数 cv2.imshow() 显示。这个片段给出了 RTSP 流链接上的黑白图像。输出如下链接[FFmpeg链接的输出]。
我试过 ffplay 命令,但它给出了直接图像。我无法访问框架或应用图像处理。
Output of FFMPEG

import cv2
import subprocess as sp
command = [ 'C:/ffmpeg/ffmpeg.exe',
'-i', 'rtsp://192.168.1.12/media/video2',
'-f', 'image2pipe',
'-pix_fmt', 'rgb24',
'-vcodec', 'rawvideo', '-']


import numpy
pipe = sp.Popen(command, stdout = sp.PIPE, bufsize=10**8)
while True:
raw_image = pipe.stdout.read(420*360*3)
# transform the byte read into a numpy array
image = numpy.fromstring(raw_image, dtype='uint8')
image = image.reshape((360,420,3))
cv2.imshow('hello',image)
cv2.waitKey(1)
# throw away the data in the pipe's buffer.
pipe.stdout.flush()

最佳答案

您使用了错误的输出格式,它应该是 -f rawvideo .这应该可以解决您的主要问题。当前-f image2pipe以图像格式包装 RGB 数据(不知道它可能是什么 BMP,因为 rawvideo 正在使用编解码器?)因此未正确显示。
其他提示:

  • 如果您的数据是灰度数据,请使用 -pix_fmt gray并阅读 420*360一次字节。
  • 不知道速度上的区别,但是我用np.frombuffer而不是 np.fromstring
  • pipe.stdout.flush() IMO 是一个危险的举动,因为缓冲区可能有部分帧。考虑设置bufsize以字节为单位的帧大小的精确整数倍。
  • 如果您预计处理时间比输入帧速率要长得多,您可能需要降低输出帧速率 -r匹配处理速率(避免从 ffmpeg 到 python 的无关数据传输)
  • 关于python - 使用 FFMPEG 命令读取帧并使用 opencv 中的 inshow 函数显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71349914/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com