我正在做一个关于视频人脸检测的项目。我从视频中检测到了脸部, 但它正在捕捉每一帧 ,所以我在第二帧中获得了这么多的图像(在一秒钟内拍摄了这么多帧) 。
问题:我想减少这一点,每3秒后捕获帧就足够了。我尝试使用wait()
,sleep()
函数。但他们只是停止运行视频一段时间,没有其他事情发生。任何人都可以帮助我克服这一点。
#include <cv.h>
#include <highgui.h>
#include <time.h>
#include <stdio.h>
using namespace std;
IplImage *frame;
int frames;
void facedetect(IplImage* image);
void saveImage(IplImage *img,char *ex);
IplImage* resizeImage(const IplImage *origImg, int newWidth,int newHeight, bool keepAspectRatio);
const char* cascade_name="haarcascade_frontalface_default.xml";//specify classifier cascade.
int k;
int main(int argc, char** argv)
{
// OpenCV Capture object to grab frames
//CvCapture *capture = cvCaptureFromCAM(0);
CvCapture *capture=cvCaptureFromFile("video.flv");
//int frames=cvSetCaptureProperty(capture,CV_CAP_PROP_FPS, 0.5);
//double res1=cvGetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES);
//cout<<"res"<<res<<endl;
// start and end times
time_t start, end;
// fps calculated using number of frames / seconds
double fps;
// frame counter
int counter = 0;
// start the clock
time(&start);
//while(cvGrabFrame(capture))
while(1)
{
//if(capture.get(CV_CAP_PROP_POS_FRAMES) % 2 == 0)
frames=cvSetCaptureProperty(capture,CV_CAP_PROP_FPS, 0.5);
if(frames%2==0)
{
frame = cvQueryFrame(capture);
cout<<"Frame"<<frame<<endl;
facedetect(frame);
}
}
cvReleaseCapture(&capture);
return 0;
}
我捕获每一帧后都给了cvWaitKey(2000)。
答案 0 :(得分:3)
这本来是我的审判。它每30帧保存一个图像。当你在一秒内说出太多图像时,我知道你指的是保存的面孔。
int counter = 0;
// start the clock
time(&start);
//while(cvGrabFrame(capture))
while(1)
{
frame = cvQueryFrame(capture);
cout<<"Frame"<<frame<<endl;
if(count%30==0)
{
facedetect(frame);
}
count++;
}
如果你真的想跳过帧,那就试试吧。每秒一帧可能是下面代码的结果。
while(1)
{
if(count%30==0)
{
frame = cvQueryFrame(capture);
cout<<"Frame"<<frame<<endl;
facedetect(frame);
}
count++;
}
答案 1 :(得分:1)
每次捕获后,您都可以尝试拨打waitKey(2000)
。
请注意,该函数不会等待2000毫秒,它将等待至少2000毫秒,具体取决于当时计算机上还有其他内容。
要获得准确的帧速率,您可以通过以下方式设置捕获帧速率:
cap.set(CV_CAP_PROP_FPS, 0.5);
答案 2 :(得分:1)
我个人而言,我建议在当前帧上使用模运算符,例如%2 == 将检查每隔一帧。
if(capture.get(CV_CAP_PROP_POS_FRAMES) % 2 == 0)
//your code to save
更改2到3或5可以定义偏移量。