質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • C++

    4505questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • OpenCV

    1552questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

opencvのR6010の解決方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,418

yamata

score 28

opencvを用いて、カメラで写真を撮影しその写真に対してテンプレートマッチングを
行うプログラムを作りました。

実行してみると、R6010のエラーがでました。
解決方法を教えていただきたいと思います。

動作環境はVC++2010Express、opencv2.4.9です。

以下にプログラムをのせます。よろしくお願いします。(include部分は省略。)

{
    int key;//キー入力用の変数
    CvCapture *capture;//カメラキャプチャ用の構造体
    IplImage *frameImage;//キャプチャ画像用IplImage
    char windowNameCapture[] = "Capture";//キャプチャした画像を表示するウィンドウの名前

    IplImage * temp = NULL;
    IplImage * dst = NULL;
    IplImage * img = NULL;
    IplImage * grey = NULL;


    double max_inter1inkage=0;
    double min_inter1inkage=0;

    CvPoint max_point;
    CvPoint min_point;
    CvPoint corner_point;

    int counter = 0;
    char str[32];


    //カメラを初期化する
    if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL ) 
    {
        //カメラが見つからなかった場合
        printf( "カメラが見つかりません\n" );
        return -1;
    }


    //Windowの生成
    cvNamedWindow("Show", CV_WINDOW_AUTOSIZE);

    //カメラ・デバイスから画像を取得
    //frameImage=cvQueryFrame(capture);

    //テンプレート・マッチングに用いる相関値データを格納する画像の領域確保
    //グレー・スケール画像用に領域確保
    //grey=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
    //dst =cvCreateImage(cvSize(img->width-temp->width+1,img->height-temp->height+1),IPL_DEPTH_32F,1);

    //メインループ
    while ( 1 )
    {
        //カメラからの入力画像1フレームをframeImageに格納する
        frameImage = cvQueryFrame( capture );

        //画像を表示する
        cvShowImage( windowNameCapture, frameImage );

        //'q'キーが入力されたらループを抜ける
        key = cvWaitKey( 1 );

        if ( key == 'q' )
        {
            break;
        }
        else if( key == 'c')
        {
            int64 start = cv::getTickCount();//所要時間計測

            sprintf_s(str, "sign.bmp", counter++);
            cvSaveImage(str, frameImage );


            //--------原画像を読み込む---------
            img=cvLoadImage("sign.png",0);
            //namedWindow("原画像");
            //imshow("原画像", src_image);

            //---------テンプレート画像を読み込む-------
            temp=cvLoadImage("temp.png",0);
            //temp=cvLoadImage("temp2.png",0);
            //temp=cvLoadImage("temp3.png",0);
            //temp=cvLoadImage("temp7.png",0);
            //temp=cvLoadImage("temp8.png",0);

            //グレー・スケールに変換して格納
            //cvCvtColor(img,grey,CV_BGR2GRAY);

            //-------テンプレートマッチングを取る-----
            //grey=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
            //dst =cvCreateImage(cvSize(img->width-temp->width+1,img->height-temp->height+1),IPL_DEPTH_32F,1);    
            cvMatchTemplate(img,temp,dst,CV_TM_CCOEFF_NORMED);

            //-----------マッチング点を求める---------
            cvMinMaxLoc(dst,&min_inter1inkage,&max_inter1inkage,
                    &min_point,&max_point,NULL);

            //------マッチングを表示する-----
            //相関値0.75以下ならばLostを表示して次に行く

            if(max_inter1inkage>0.75)
            {
                //座標を見やすく代入(直接代入でもよい)
                corner_point=cvPoint(max_point.x+temp->width,
                         max_point.y+temp->height);

                //マッチング箇所を四角で描画
                cvRectangle(img,max_point,corner_point,CV_RGB(255,0,0),2);
                printf("Detection\n");
            }

            else
            {
                printf("Lost\n");
            }

            int64 end = cv::getTickCount();
            double elapsedMsec = ( end - start )*1000/cv::getTickFrequency();

            std::cout << elapsedMsec <<"ms" <<std::endl;
        }
    }    

    //メモリ開放
    cvReleaseCapture(&capture);
    cvDestroyWindow("windowNameCapture");
    return 0;

}
コード
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • T.Kanno

    2016/06/24 14:29

    エラーが出ているときの画面イメージや正確な文言が必要だと思います。
    あと、コマンドプロンプトからの実行を行っていれば、実行時エラーの詳細が出力されると思いますが、それも合わせて質問に加えるとよいでしょう。

    キャンセル

  • T.Kanno

    2016/06/24 14:33

    あと、VisualStudio のデバッガでステップ実行するなりで、エラーの発生している場所を特定して、どのAPI呼び出しで発生しているかの情報もあった方が良いでしょう。よほどのプログラムコードの凡ミスでなければ、OpenCV でおこる実行時エラーの原因はAPIに与えるパラメータが不適切なことが多いです。

    キャンセル

  • yamata

    2016/06/24 14:46

    すいません。解決しました。

    キャンセル

  • PineMatsu

    2016/06/28 17:44

    解決済みにしてください。

    キャンセル

回答 1

check解決した方法

0

プログラムミスでした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • C++

    4505questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • OpenCV

    1552questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。