首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以创建一个虚拟摄像头并向其流式传输数据吗?

我可以创建一个虚拟摄像头并向其流式传输数据吗?
EN

Stack Overflow用户
提问于 2011-09-30 10:50:49
回答 2查看 4.7K关注 1票数 3

我希望从FMPEG流视频到OpenCV (一个视频操作库),但我被难住了。我的想法是创建一个虚拟的摄像头设备,然后将来自ffmpeg的视频流传输到这个设备上,设备将像普通的摄像头一样流传输。我的动机是为了OpenCV。OpenCV可以从网络摄像头中读取视频流,然后愉快地前进。

但这是可能的吗?我知道有软件可以创建虚拟摄像头,但它能接受视频流(比如来自ffmpeg的视频流)吗?它能像普通摄像头一样传输视频吗?(我在cygwin环境中工作,如果这很重要)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-01 02:09:17

你不需要欺骗OpenCV,让他们认为这个文件是一个摄像头。你只需要在每一帧之间添加一个延迟。这段代码将会做到这一点:

代码语言:javascript
复制
#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:创建的文件

代码语言:javascript
复制
    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还在创建它的时候,它将如何处理在文件末尾获得一个部分帧。

票数 1
EN

Stack Overflow用户

发布于 2011-09-30 12:46:48

听起来你想要的是VideoCapture::Open,它既可以打开视频设备,也可以打开文件。

如果您使用的是C,则等效项是cvCaptureFromFilecvCaptureFromCAM

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7605476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档