我希望从FMPEG流视频到OpenCV (一个视频操作库),但我被难住了。我的想法是创建一个虚拟的摄像头设备,然后将来自ffmpeg的视频流传输到这个设备上,设备将像普通的摄像头一样流传输。我的动机是为了OpenCV。OpenCV可以从网络摄像头中读取视频流,然后愉快地前进。
但这是可能的吗?我知道有软件可以创建虚拟摄像头,但它能接受视频流(比如来自ffmpeg的视频流)吗?它能像普通摄像头一样传输视频吗?(我在cygwin环境中工作,如果这很重要)
发布于 2011-10-01 02:09:17
你不需要欺骗OpenCV,让他们认为这个文件是一个摄像头。你只需要在每一帧之间添加一个延迟。这段代码将会做到这一点:
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
int main(int argc, const char * argv[]) {
VideoCapture cap;
cap.open("/Users/steve/Development/opencv2/opencv_extra/testdata/python/videos/bmp24.avi");
if (!cap.isOpened()) {
printf("Unable to open video file\n");
return -1;
}
Mat frame;
namedWindow("video", 1);
for(;;) {
cap >> frame;
if(!frame.data)
break;
imshow("video", frame);
if(waitKey(30) >= 0) //Show each frame for 30ms
break;
}
return 0;
}编辑:正在尝试读取由ffmpeg:创建的文件
for(;;) {
cap >> frame;
if(frame.data)
imshow("video", frame); //show frame if successfully loaded
if(waitKey(30) == 27) //Wait 30 ms. Quit if user presses escape
break;
}我不确定当ffmpeg还在创建它的时候,它将如何处理在文件末尾获得一个部分帧。
发布于 2011-09-30 12:46:48
听起来你想要的是VideoCapture::Open,它既可以打开视频设备,也可以打开文件。
如果您使用的是C,则等效项是cvCaptureFromFile和cvCaptureFromCAM。
https://stackoverflow.com/questions/7605476
复制相似问题