OpenCV Python,从命名管道中读取视频

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV Python,从命名管道中读取视频相关的知识,希望对你有一定的参考价值。

我正在尝试获得视频所示的结果(使用netcat的方法3)https://www.youtube.com/watch?v=sYGdge3T30o它是将视频从树莓派流式传输到ubuntu PC并使用openCV和python处理它。

我使用命令

raspivid -vf -n -w 640 -h 480 -o - -t 0 -b 2000000 | nc 192.168.1.137 8000

将视频流式传输到我的PC,然后在PC上创建名称管道'fifo'并重定向输出

nc -l -p 8000 -v > fifo

然后我试图读取管道并在python脚本中显示结果

import cv2
import subprocess as sp
import numpy

FFMPEG_BIN = "ffmpeg.exe"
command = [ FFMPEG_BIN,
        '-i', 'fifo',             # fifo is the named pipe
        '-pix_fmt', 'bgr24',      # opencv requires bgr24 pixel format.
        '-vcodec', 'rawvideo',
        '-an','-sn',              # we want to disable audio processing (there is no audio)
        '-f', 'image2pipe', '-']    
pipe = sp.Popen(command, stdout = sp.PIPE, bufsize=10**8)

while True:
    # Capture frame-by-frame
    raw_image = pipe.stdout.read(640*480*3)
    # transform the byte read into a numpy array
    image =  numpy.frombuffer(raw_image, dtype='uint8')
    image = image.reshape((480,640,3))          # Notice how height is specified first and then width
    if image is not None:
        cv2.imshow('Video', image)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    pipe.stdout.flush()

cv2.destroyAllWindows()

但是我遇到了这个错误:

Traceback (most recent call last):
  File "C:\Users\Nick\Desktop\python video stream\stream.py", line 19, in <module>
    image = image.reshape((480,640,3))          # Notice how height is specified first and then width
ValueError: cannot reshape array of size 0 into shape (480,640,3)

似乎numpy数组为空,因此有解决此问题的想法吗?

答案

图像数组为空。由于raw_image也为空,因此似乎未读取视频。确保视频已打开并正在阅读。

以上是关于OpenCV Python,从命名管道中读取视频的主要内容,如果未能解决你的问题,请参考以下文章

Python 可以从 Windows Powershell 命名管道中读取吗?

Python 从命名管道/FIFO 中读取 JSON

使用python将opencv图像通过管道传输到ffmpeg

使用 cmd.exe 或 PowerShell 或 Python 从 Windows 命名管道中读取

从命名管道、C 程序(编写器)和 Python(读取器)获取额外数据

OpenCV入门(C++/Python)- 使用OpenCV读取和编写视频