我試圖從我的Logitech C920在OpenCV中捕獲視頻流。藉助Labview,我可以以30fps 1080p的速度訪問MJPG流。在opencv中,我僅限於5fps或640x480。以30fps捕捉1080p與羅技c920與openCV 2.4.3
下面是相關的相機設置代碼:
this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G'));
這些都返回1,但我得到1080的5fps的流對應於YUY2流。
如果我添加以下行:
this->camRef.set(CV_CAP_PROP_FPS, 30);
這回0 我在640×480弄30 fps的流。對我來說,看起來MJPG設置不被接受,但我不知道該怎麼做或如何解決這個問題。
編輯:下面的程序崩潰。
this->camRef.read(this->image);
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, config.width) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, config.height) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G')) << std::endl;
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
然後在我運行代碼,我有以下幾點:
void camera::run()
{
while(true)
{
if(this->camRef.read(this->image) == 0)
{
if(this->capture)
{
cv::imwrite(fileName,this->image);
this->count++;
}
}
msleep(15);
}
}
EDIT2:解決方法是設置攝像頭的高度和寬度之前設置的四字符碼編解碼器。
,如果你想設置的FPS(必須由攝像機支持),您必須經過編解碼器的設置做到這一點,但寬度前/高度設置 – MartinM
聽起來像你的EDIT2給你1080p在30fps。應該變成答案,然後接受,使問題得到解決。 –