大家下午好,
在OpenCV中,我无法获得VideoCapture的设置功能来改变帧速率。这是我的测试程序,使用" 768x576.avi"测试来自" C:\ OpenCV-3.1.0 \ opencv \ sources \ samples \ data&#34的视频文件;目录
// VideoCaptureSetTest.cpp
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
#include<conio.h> // it may be necessary to change or remove this line if not using Windows
///////////////////////////////////////////////////////////////////////////////////////////////////
int main() {
cv::VideoCapture capVideo;
cv::Mat imgFrame;
capVideo.open("768x576.avi");
if (!capVideo.isOpened()) { // if unable to open video file
std::cout << "error reading video file" << std::endl << std::endl; // show error message
_getch(); // it may be necessary to change or remove this line if not using Windows
return(0); // and exit program
}
char chCheckForEscKey = 0;
double dblFPS = capVideo.get(CV_CAP_PROP_FPS);
std::cout << "1st time - dblFPS = " << dblFPS << "\n"; // this prints "10" to std out as expected
bool blnSetReturnValue = capVideo.set(CV_CAP_PROP_FPS, 5);
std::cout << "2nd time - dblFPS = " << dblFPS << "\n"; // this also prints "10", why not "5" as expected ??!!
std::cout << "blnSetReturnValue = " << blnSetReturnValue << std::endl; // this prints "0" (i.e. false)
while (chCheckForEscKey != 27) {
capVideo.read(imgFrame);
if (imgFrame.empty()) break;
cv::imshow("imgFrame", imgFrame);
chCheckForEscKey = cv::waitKey(1);
}
return(0);
}
我在这里使用非常标准的设置,OpenCV 3.1.0,Visual Studio 2015,Windows 10和我测试的.avi文件是随OpenCV一起提供的。
无论我尝试将FPS设置为什么,它都保持在10并且set函数总是返回false。
是的,我已经意识到将cv :: waitKey()参数设置为更大的值以实现某个延迟的黑客修复,但这将取决于计算机,我可能需要运行视频在未来的各种计算机上,所以这不是一个选择。
我做错了吗?是否已知VideoCapture :: set函数在某些情况下不起作用?有没有人经历过相同的结果?我检查了OpenCV问题跟踪器,但没有发现任何此类效果。这是一个我应该为此门票提出的错误吗?任何有经验的人请告知。