1
#include <cv.h>
#include <highgui.h>
#include <math.h>

int main(int argc, char** argv)
{
    IplImage* src;
    if( argc == 2 && (src=cvLoadImage("qqqq.jpg", 0))!= 0)
    {
        IplImage* dst = cvCreateImage( cvGetSize(src), 8, 1 );
        IplImage* color_dst = cvCreateImage( cvGetSize(src), 8, 3 );
        CvMemStorage* storage = cvCreateMemStorage(0);
        CvSeq* lines = 0;
        int i;
        cvCanny( src, dst, 50, 200, 3 );
        cvCvtColor( dst, color_dst, CV_GRAY2BGR );
#if 1
        lines = cvHoughLines2( dst,
                               storage,
                               CV_HOUGH_STANDARD,
                               1,
                               CV_PI/180,
                               100,
                               0,
                               0 );

        for( i = 0; i < MIN(lines->total,100); i++ )
        {
            float* line = (float*)cvGetSeqElem(lines,i);
            float rho = line[0];
            float theta = line[1];
            CvPoint pt1, pt2;
            double a = cos(theta), b = sin(theta);
            double x0 = a*rho, y0 = b*rho;
            pt1.x = cvRound(x0 + 1000*(-b));
            pt1.y = cvRound(y0 + 1000*(a));
            pt2.x = cvRound(x0 - 1000*(-b));
            pt2.y = cvRound(y0 - 1000*(a));
            cvLine( color_dst, pt1, pt2, CV_RGB(255,0,0), 3, 8 );
        }
#else
        lines = cvHoughLines2( dst,
                               storage,
                               CV_HOUGH_PROBABILISTIC,
                               1,
                               CV_PI/180,
                               80,
                               30,
                               10 );
        for( i = 0; i < lines->total; i++ )
        {
            CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
            cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8 );
        }
#endif
        cvNamedWindow( "Source", 1 );
        cvShowImage( "Source", src );

        cvNamedWindow( "Hough", 1 );
        cvShowImage( "Hough", color_dst );

        cvWaitKey(0);
    }

}

このコードをopencvの「ハフ変換」に使用して、画像内のオブジェクトを検出しました。プログラムはエラーなしで実行されます。しかし、その結果、コンソール ウィンドウだけがすぐに表示され、すぐに消えてしまいます。私はこれのために何をすべきですか。

4

1 に答える 1

1

それはあなたがそこに持っているいくつかの悪い論理です:

  • 1 つ目:argcが 2 より大きいか小さい場合、メイン コードは実行されず、通知もされません。
  • 2 番目: 何らかの理由cvLoadImage()で失敗した場合、それについても通知されません。

次の 2 つのいずれかが発生していると思われます。適切な数のパラメーターでプログラムを呼び出していないか、cvLoadImage()失敗しています (ファイルが見つからないか、ファイルの種類がサポートされていません)。

適切なデバッグ (printf 呼び出し) を追加して、実際に何が起こっているかを確認することをお勧めします。

編集:

いくつかのメモ:

  • イメージがロードされている"qqqq.jpg"場合、および Visual Studio 内からプログラムを実行している場合は、ソース コード ファイルと同じフォルダー内にイメージを配置する必要があります (.exe があるフォルダーではありません)。
  • Windows を使用していて、フル パスを使用してイメージを読み込もうとしている場合は、忘れずにスラッシュをエスケープしてください。C:\\folder\\qqqq.jpg
  • 参考argc == 2までに、次の形式を使用してコマンドラインからアプリケーションを実行していることを意味します。app.exe param1
于 2012-06-04T02:08:25.260 に答える