OpenCV を使用して、単純なバックグラウンド減算プログラムに取り組んでいBackgroundSubtractorMOG2
ます。コード:
int main()
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat frame,foreground,image,edges;
BackgroundSubtractorMOG2 mog;
namedWindow("Capture", CV_WINDOW_AUTOSIZE);
namedWindow("Contours", CV_WINDOW_AUTOSIZE);
while(1)
{
cap >> frame; // get a new frame from camera
if( frame.empty() )
break;
image=frame.clone();
mog(frame,foreground,-1);
threshold(foreground,foreground,1,250,THRESH_BINARY);
medianBlur(foreground,foreground,9);
erode(foreground,foreground,Mat());
dilate(foreground,foreground,Mat());
imshow( "Capture",image );
imshow("Contours",foreground);
if(waitKey(30) >= 0) break;
}
}
プログラムは動作しますが、終了時に次のようなエラーが発生し、568 行Unhandled exception at 0xfeeefeee in {prog_name}.exe: 0xC0000005: Access violation reading location 0xfeeefeee.
目を指します。crtexe.c
if (has_cctor == 0)
_cexit();
問題の原因は何ですか?前もって感謝します。
PS: 現在 OpenCV 2.3.4 と VS C++ 2010 Exp を使用しています。Windows XP で。
PSS:カメラを含む各クラス/ポインターは、終了時に初期化解除/破棄されることがわかります。間違っていたら訂正してください。
Updates(1) :いくつかの行を追加した後でもエラーが発生します。
Updates(2) : すべての行で DEBUG を試しましたが、まだ何も得られませんでした。リソースを解放する機能を試行delete
しましたが、 で使用するポインタが見つかりませんdelete
。
更新 (3) : 私が使用して作成したすべてのビデオ処理プログラムはOpenCV C++
、本やインターネットからコピーして貼り付けたものであっても、終了時にクラッシュするようです。で変更break
しましたがreturn -1
、まだクラッシュします...
更新 (4) : 別の PC (Ms VS 2010 Pro、Windows Vista 64b) でプログラムを試してみましたが、クラッシュは発生しませんでした。明らかにパソコンの設定がおかしい…