opencv - 我可以创建虚拟网络摄像头并向其传输数据吗?

标签 opencv ffmpeg webcam

我想将视频从 ffmpeg 流式传输到 OpenCV(一个视频处理库),但我很困惑。我的想法是创建一个虚拟网络摄像头设备,然后将视频从 ffmpeg 流式传输到该设备,然后该设备将像普通网络摄像头一样进行流式传输。我的动机是 OpenCV。 OpenCV 可以从网络摄像头中读取视频流,然后继续前进。

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

最佳答案

您无需欺骗 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 仍在创建它时它将如何处理在文件末尾获取部分帧。

关于opencv - 我可以创建虚拟网络摄像头并向其传输数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7605476/

相关文章:

ffmpeg - 如何使用带有 h.264_qsv 的 ffmpeg 在给定间隔强制关键帧?

c++ - 如何让 linux 系统等待 OpenCV 程序?

php - FFmpeg : why we need to create temp files during conversion

java - java中的FFMPEG进度条

image - 用 Java 访问网络摄像头的最佳方式

c++ - 媒体基金会 : Cannot change a FPS on webcam

c++ - 在 C++ 中赋予回调函数访问类数据成员的权限

c++ - 为什么 Dlib 会编译 8000 多个函数?

android - javacv:应用程序以 opencv_contrib.createLBPHFaceRecognizer 终止

opencv - 如何沿线提取强度分布图?