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 放在 Click 事件上,我尝试进行图像处理

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

代码对我来说很好,完全没有错误。但vecCircles.size()这里显示为零。请在调试模式下构建并找到断点(按住 F10)。

于 2013-03-28T08:20:23.277 回答
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

您可以尝试根据您添加的 .lib 文件来打开 OpenCV .dll 文件,例如将opencv_world320.dll放入您的 .exe 文件的同一目录中。

请注意,.dll 文件在调试模式和发布模式上有所不同,例如opencv_world320.dll用于发布模式,而opencv_world320 d .dll用于调试模式。

.dll 文件可以在 opencv/build/bin 目录下找到。

于 2017-11-27T13:51:03.630 回答