Nic*_*ijn 12 python opencv vlc
这让我在下午的大部分时间都很忙,而且我无法让它上班,但我觉得我真的很亲近.
我已经设置了openCV,它可以从网络摄像头中获取录像带.为了能够访问此视频源(使用openCV覆盖),我想将openCV python脚本的输出传递给VLC流.我设法让流启动并运行并可以连接到它.VLC调整到正确的宽高比和分辨率,因此它获得了一些正确的数据,但我得到的图像只是抖动 ;
python opencv.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=320 --rawvid-height=240 --rawvid-chroma=RV24 - --sout "#transcode{vcodec=h264,vb=200,fps=30,width=320,height=240}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=:8081/stream.flv}" &
Run Code Online (Sandbox Code Playgroud)
脚本的输出是发送到stdout的常量视频源,如下所示
from imutils.video import WebcamVideoStream
vs = WebcamVideoStream(src=0)
while True:
frame = vs.read()
sys.stdout.write(frame.tostring())
Run Code Online (Sandbox Code Playgroud)
上面的例子是我正在使用的脚本的一个愚蠢的版本; 另外我看到我正在使用imutils库; https://github.com/jrosebr1/imutils
如果有人能给我一个正确方向的推动,我会非常感激.我的猜测是stdout.write(frame.tostring())不是vlc所期望的,但我自己也无法弄明白.
以下内容在 Python 3 下适用于我
import numpy as np
import sys
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
sys.stdout.buffer.write(frame.tobytes())
else:
break
cap.release()
Run Code Online (Sandbox Code Playgroud)
和命令行(我的网络摄像头有不同的分辨率,我只显示结果,但你没有遇到问题)
python opencv.py | vlc --demux=rawvideo --rawvid-fps=25 --rawvid-width=640 --rawvid-height=480 --rawvid-chroma=RV24 - --sout "#display"
Run Code Online (Sandbox Code Playgroud)
当然,这需要从 BGR 到 RGB 的转换,因为前者在 OpenCV 中是默认的。
| 归档时间: |
|
| 查看次数: |
6088 次 |
| 最近记录: |