カメラから取得した映像から1フレーム目と2フレーム目の差分の画像、1フレーム目と3フレーム目の差分の画像を取得するプログラムを書きました。
動作するのですが数分経つと「ハンドルされていない例外が発生しました:」とでてエラーがでます。
どうやら原因はメモリリークらしいのですがどう対処していいのかわかりません。
アドバイスお願いします。
#include <opencv2/opencv.hpp> // OpenCVヘッダ
#pragma comment(lib,"opencv_imgproc242d.lib") // OpenCVライブラリ
#pragma comment(lib,"opencv_core242d.lib") // OpenCVライブラリ
#pragma comment(lib,"opencv_highgui242d.lib") // OpenCVライブラリ
int main(int argc, char* argv[])
{
int key;
CvCapture* capture; //ビデオキャプチャ宣言
IplImage *srcCur=NULL, *Noillum=NULL, *lt_1=NULL, *lt_2=NULL, *dst_1=NULL, *dst_2=NULL; // 画像リソース宣言
cvNamedWindow("カメラ映像表示1"); // 表示ウィンドウの作成
cvNamedWindow("カメラ映像表示2"); // 表示ウィンドウの作成
capture = cvCaptureFromCAM(0); // 映像取得(カメラ映像)
if(capture == NULL){ // ファイルが読み込めない場合
printf("映像が取得できません。\n");
cvWaitKey(0); // キー入力待機
return -1;
}
srcCur=cvQueryFrame(capture); // 取得
dst_1=cvCloneImage(srcCur);
dst_2=cvCloneImage(srcCur);
while(1){ //映像が終了するまで繰り返す
int gazo;
for (gazo = 1;gazo<= 3; gazo++){ //3枚の画像を取得
srcCur=cvQueryFrame(capture);
if (gazo == 1){
Noillum=cvCloneImage(srcCur); //1枚目の画像を取得
if(Noillum==NULL)
break;
} else if (gazo == 2){
lt_1=cvCloneImage(srcCur); //2枚目の画像を取得
if(lt_1==NULL)
break;
} else if (gazo == 3){
lt_2=cvCloneImage(srcCur); //3枚目の画像を取得
if(lt_2==NULL)
break;
}
}
cvSub(Noillum, lt_1, dst_1); //1枚目と2枚目の差分
cvShowImage("カメラ映像表示1", dst_1); // 表示
cvSub(Noillum, lt_2, dst_2); //1枚目と3枚目の差分
cvShowImage("カメラ映像表示2", dst_2); // 表示
key = cvWaitKey(33); // キー入力待機(33ms)
if(key == 27) break; //ESCキーを押した時終了
}
cvDestroyWindow("カメラ映像表示1"); // 表示ウィンドウの破棄
cvDestroyWindow("カメラ映像表示2"); // 表示ウィンドウの破棄
cvReleaseCapture(&capture); // ビデオキャプチャの開放
return 0;
}