0

円を検出するために QT で opencv2.3.1 を使用しています。

私の Open CV ディレクトリは D:\OpenCV です

ここに私のコード:

プロジェクト ファイル:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = ImgProcessing
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h \

FORMS    += mainwindow.ui


INCLUDEPATH +=D:\\opencv\\build\\include

LIBS += -LD:\\opencv\\build\\x86\\vc10\\lib \
    -lopencv_calib3d231d \
    -lopencv_contrib231d \
    -lopencv_core231d \
    -lopencv_features2d231d \
    -lopencv_flann231d \
    -lopencv_gpu231d \
    -lopencv_haartraining_engined \
    -lopencv_highgui231d \
    -lopencv_imgproc231d \
    -lopencv_legacy231d \
    -lopencv_ml231d \
    -lopencv_objdetect231d \
    -lopencv_ts231d \
    -lopencv_video231d

メインウィンドウで、クリックイベントに QPushButton を配置し、画像処理を実行しようとしています

void MainWindow::on_pushButton_clicked()
{
    cv::Mat matOrg=cv::imread("D:\\temp\\Test_mar26-5-1.bmp");
    cv::Mat matProcessed;

    std::vector<cv::Vec3f> vecCircles;
    std::vector<cv::Vec3f>::iterator itrCircles;

    cv::inRange(matOrg,cv::Scalar(0,0,175),cv::Scalar(100,100,256),matProcessed);
    cv::GaussianBlur(matProcessed,matProcessed,cv::Size(9,9),1.5);
    cv::HoughCircles(matProcessed,vecCircles,CV_HOUGH_GRADIENT,2,matProcessed.rows/4,100,50,10,400);

    for(itrCircles =vecCircles.begin();itrCircles !=vecCircles.end();itrCircles++)
    {
        ui->plainTextEdit->appendPlainText(QString("X: ")+ QString::number((*itrCircles)[0]));
        ui->plainTextEdit->appendPlainText(QString("Y: ")+ QString::number((*itrCircles)[1]));
        ui->plainTextEdit->appendPlainText(QString("Radius: ")+ QString::number((*itrCircles)[2]));
    }
}

問題なくプロジェクトを構築します。しかし、問題は、プログラムを実行しようとすると、次のエラーが発生することです

起動

D:\ImgProcessing-build-Desktop_Qt_5_0_0_MSVC2010_32bit_SDK\debug\ImgProcessing.exe...

プログラムが予期せず終了しました。

D:\ImgProcessing-build-Desktop_Qt_5_0_0_MSVC2010_32bit_SDK\debug\ImgProcessing.exe がコード -1073741515 で終了しました

なぜ実行されていないのですか?ブロック全体にコメントを付けようとすると、実行中です(画像処理コードはありません)。その時点で cv::mat 変数を有効にすると、ランタイム エラーが発生します。

問題を解決するのを手伝ってください。私が処理しようとしている画像は以下です ここに画像の説明を入力

4

3 に答える 3

0

ブロックのみにコメントを付けます:

for(itrCircles =vecCircles.begin();itrCircles !=vecCircles.end();itrCircles++)
{
    ui->plainTextEdit->appendPlainText(QString("X: ")+ QString::number((*itrCircles)[0]));
    ui->plainTextEdit->appendPlainText(QString("Y: ")+ QString::number((*itrCircles)[1]));
    ui->plainTextEdit->appendPlainText(QString("Radius: ")+ QString::number((*itrCircles)[2]));
}

vecCircles に問題がある可能性があります。ただし、有効なアプローチとして、段階的にデバッグする必要があります

于 2013-03-27T14:27:51.677 に答える
0

コードは問題なく機能し、エラーはまったくありませんでした。しかし、vecCircles.size()ここではゼロを示しています。デバッグ モードでビルドし、ブレークポイントを見つけてください (F10 を押し続けます)。

于 2013-03-28T08:20:23.277 に答える