我尝试实施概念验证程序:(1)从网络摄像头获取视频,(2)对其进行一些操作,(3)在网页上传输修改后的视频。
我这样做:
1)在开放式CV中:打开网络摄像头流并输出帧作为rawvideo,capture.py看起来:
import cv2
import sys
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
ret, frame = cap.read()
if(ret):
sys.stdout.write(frame.tostring())
else:
break
2)执行:python2 capture.py | ffmpeg -framerate 30 -f rawvideo -pixel_format bgr24 -video_size 640x480 -i - -f mpegts -codec:v mpeg1video -s 640x480 -b:v 2500k -bf 0 http://localhost:8081/supersecret
3)根据页面https://github.com/phoboslab/jsmpeg上的说明运行Websocket中继和http-server,以便在浏览器中流式传输视频。
我在浏览器中获取了流,但是当我在capture.py文件中的框架上应用任何更改(例如frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
)时,我获得了9个小流而不是一个。
当我在启动ffmpeg服务器时更改视频分辨率时,会出现同样的情况。当我直接从/ dev / video0输入管道时,我得到了正确的流。
如何对视频进行某些操作并获取单个图像流?