Могу ли я создать виртуальную веб-камеру и передавать на нее данные? - PullRequest
2 голосов
/ 30 сентября 2011

Я ищу поток видео из ffmpeg в OpenCV (библиотека видео манипуляций), и я в тупике.Моя идея состоит в том, чтобы создать виртуальное устройство веб-камеры и затем передавать потоковое видео с ffmpeg на это устройство, и устройство, в свою очередь, будет транслировать поток, как обычная веб-камера.Моя мотивация для OpenCV.OpenCV может читать видеопоток с веб-камеры и идти своим путем.

Но возможно ли это?Я знаю, что есть программное обеспечение для создания виртуальной веб-камеры, но может ли оно принимать видеопоток (например, из ffmpeg) и может ли оно передавать потоковое видео как обычная веб-камера?(Я работаю в среде Cygwin, если это важно)

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Вам не нужно обманывать 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;
}

Edit: попытка чтения из файла, создаваемого 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 все еще его создает.

0 голосов
/ 30 сентября 2011

Похоже, что вы хотите, это VideoCapture :: Open , который может открывать как видеоустройства, так и файлы.

Если вы используете C, эквиваленты cvCaptureFromFile и cvCaptureFromCAM.

...