我期待從ffmpeg到OpenCV(視頻操作庫)的視頻流,我很難過。我的想法是創建一個虛擬攝像頭設備,然後將來自ffmpeg的視頻流傳輸到此設備,設備將反過來像一個普通的攝像頭一樣流。我的動機是OpenCV。 OpenCV可以從網絡攝像頭讀取視頻流,並順其自然。我可以創建虛擬攝像頭並將數據流傳輸到它嗎?
但是這可能嗎?我知道有創建虛擬攝像頭的軟件,但它可以接受視頻流(如來自ffmpeg),並且可以像正常的網絡攝像頭一樣傳輸視頻嗎? (如果這很重要,我正在cygwin環境中工作)
我期待從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仍在創建它。
聽起來像你想要的是VideoCapture::Open,它可以打開視頻設備和文件。
如果您使用C,則相當於cvCaptureFromFile
和cvCaptureFromCAM
。
也許我應該更清楚。我已經在打開文件和網絡攝像頭方面取得了成功,但是當我試圖將視頻從ffmpeg流式傳輸到我的OpenCV C++工具時,我遇到了困難。所以我認爲我可以創建一個虛擬攝像頭,以便OpenCV認爲來自它的視頻是一個實際的設備......但我不確定這是否可能。 – chembrad
我在尋找類似的解決方案。我想餵我自己的視頻流到虛擬網絡攝像頭,就像正常的網絡攝像頭 –