0

ウェブカメラから画像のストリームをキャプチャし、顔を検出して画像ボックスに画像を表示する、OpenCV の単純な Windows フォーム アプリケーションを作成しました。顔検出機能を実行する別のスレッドを作成しました。フォームにはボタンと画像ボックスがあり、ボタンが押されると顔検出スレッドが開始されます。約 2 分半は正常に動作し、その後、次の例外がスローされます。

An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in Sampleapp.exe

Additional information: External component has thrown an exception.

顔検出機能のコード全体は次のとおりです。

#include "stdafx.h"
#include "Form1.h"
#include <cv.h>
#include <highgui.h>

namespace Sampleapp {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    const char *frontalface_cascade_name = "haarcascade_frontalface_alt.xml";
    CvHaarClassifierCascade *frontalface_cascade;
    //----------------------
    // Face detector
    void Form1::face_detector()
    {
        IplImage* img;
        IplImage *img_gray;
        CvMemStorage *storage;
        CvSeq* faces;
        /*CvSeq* righteye;
        CvSeq* lefteye;
        CvSeq* nose;*/
        frontalface_cascade = ( CvHaarClassifierCascade* )cvLoad( frontalface_cascade_name, 0, 0, 0 );
        while(this->button1->Text == "no")
        {
            try             
            {
                storage = cvCreateMemStorage( 0 );
                CvCapture *capture = cvCreateCameraCapture(0);
                img = cvQueryFrame(capture);
                img_gray = cvCreateImage( cvSize( img->width, img->height ), IPL_DEPTH_8U, 1 );
                cvCvtColor( img, img_gray, CV_BGR2GRAY );
                cvEqualizeHist( img_gray, img_gray );
                faces = cvHaarDetectObjects( img_gray, frontalface_cascade, storage, 1.1, 2, CV_HAAR_FIND_BIGGEST_OBJECT, cvSize(40, 40));
                this->pictureBox1->Image = (gcnew System::Drawing::Bitmap(img->width,img->height,img->widthStep, System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr)img->imageData));                            
                cvReleaseMemStorage(&storage);
            }
            catch (System::NullReferenceException^ m)
            {
            }
        }
    }
}

例外は次の場所でスローされます。

faces = cvHaarDetectObjects( .....)

セグメント。

デバッグ出力は次のとおりです。

First-chance exception at 0x74b9c41f in Sampleapp.exe: Microsoft C++ exception: cv::Exception at memory location 0x069ce950.. 
A first chance exception of type 'System.Runtime.InteropServices.SEHException' occurred in Sampleapp.exe 
An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in Sampleapp.exe 
Additional information: External component has thrown an exception.

この問題を解決するために何をすべきか知っている人がいたら、教えてください。

敬具、ジョサイア

4

0 に答える 0