我正在尝试以25fps平滑地显示视频文件,没有任何延迟。下面的代码执行此操作,但只能达到大约10fps,执行大约需要0.1ms。使用cvWaitKey(1)我得到0.03到0.04ms左右,这将是完美的,但命名窗口只是保持灰色,不显示视频!
这是因为cvShowImage()太慢了吗?有没有其他方法可以加速代码并顺利输出视频?
请参阅下面的代码。
提前多多感谢,
阿德里安
#include <cv.h>
#include <iostream>
#include <highgui.h>
#include <cxcore.h>
#include <cvaux.h>
#include <sstream>
#include <time.h>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
CvCapture* vid = 0;
IplImage* input; //Input image
int fps;
int i=0;
clock_t start, end;
/*Creates the GUI to output the processed images*/
cvNamedWindow("Video input", 0);
/*Open input video*/
if (argc!=2)
{
cout << "Please specify an input video." << endl;
return -1;
}
else
{
vid=cvCreateFileCapture(argv[1]);
if (!vid)
{
cout << "Could not extract frame." << endl;
return -1;
}
}
input = cvQueryFrame(vid);
fps = (int)cvGetCaptureProperty(vid, CV_CAP_PROP_FPS);
cout << fps << endl;
cout << "Video found." << endl;
/*Extraction loop */
while (input)
{
start = clock();
cout << flush;
cout << i << "\r";
i++;
/*Show image*/
cvShowImage("Video input", input);
cvWaitKey(2); //Wait is needed or else we see a grey box
input = cvQueryFrame(vid); //Read next frame from video
end = clock();
cout << (double)(end-start)/CLOCKS_PER_SEC << " s" << endl;
};
/*Release the allocated memory for the frames */
cvReleaseImage(&input);
cvDestroyWindow("Video input");
return 1;
}
答案 0 :(得分:1)
你是否尝试过没有所有cout的东西?
Microsoft STL的调试版本具有cout处理功能,几乎令人难以置信地缓慢。
答案 1 :(得分:1)
尝试在需要1000 / fps的情况下调用cvWaitKey:
cvWaitKey(1000年至1025年)
答案 2 :(得分:0)
您可以尝试以下方式:
char key = cvWaitKey(10); //waits 10 milliseconds
if (key == 27) //and if ESC is pressed, get out of the loop
break;