しかし、出力された動画は元の動画よりも時間が長くなっており、再生がすごくゆっくりしたものになっています。
元の動画とほぼ同速で出力させるにはどのようにすればよいでしょうか。
動画ファイルでなく、USBカメラから取り込む場合は速度そのままに処理できていたのですが、ファイルの動画から処理しようとすると遅くなっています。
//サーマルカメラを考慮
#include <C:/opencv2411/build/include\opencv/highgui.h>
#include <C:/opencv2411/build/include\opencv/cv.h>
#include <C:/opencv2411/build/include\opencv/cxcore.h>
//opencvの関数名省略のため [cv::]省略
using namespace std;
using namespace cv;
int main(int argc, char* argv[]){
CvCapture* capture;
// フレーム単位データ
IplImage* frame;
char* fname = "output.avi";
capture = cvCreateFileCapture(fname);
if(capture == NULL)return 0;
// 縦横サイズ
double height = 240;
double width = 320;
// 入力キー受け付け用
int c;
int cnt = 0;
///
// eye検出器の読み込み
CvHaarClassifierCascade* cvHCC2 = (CvHaarClassifierCascade*)cvLoad("C:/image/haarcascade_eye_tree_eyeglasses.xml");
CvMemStorage* cvMStr2 = cvCreateMemStorage(0);
CvSeq* eye;
///
cvNamedWindow ("capture_face_detect", CV_WINDOW_AUTOSIZE);
// 停止キーが押されるまでカメラキャプチャを続ける
while (1) {
frame = cvQueryFrame (capture);
if(frame == NULL)break;
// 画像中から検出対象の情報を取得する
eye = cvHaarDetectObjects(frame, cvHCC2, cvMStr2);
for (int i = 0; i < eye->total; i++) {
// 検出情報から顔の位置情報を取得
CvRect* eyeRect = (CvRect*)cvGetSeqElem(eye, i);
//
// 取得した顔の位置情報に基づき、矩形描画を行う
cvRectangle(frame,
cvPoint(eyeRect->x, eyeRect->y),
cvPoint(eyeRect->x + eyeRect->width, eyeRect->y + eyeRect->height),
CV_RGB(0, 255 ,0),
3, CV_AA);
if(eyeRect != nullptr) cnt++;
}
cvShowImage ("capture_face_detect", frame);
cout << cnt << endl;
// 終了キー入力待ち(タイムアウト付き)
c = cvWaitKey (1);
if (c == 'e') {
break;
}
}
// 生成したメモリストレージを解放
cvReleaseMemStorage(&cvMStr2);
// キャプチャの解放
cvReleaseCapture (&capture);
// ウィンドウの破棄
cvDestroyWindow("capture_face_detect");
// カスケード識別器の解放
cvReleaseHaarClassifierCascade(&cvHCC2);
return 0;
}