使用 openCV 在 QT 中进行图像处理

Posted

技术标签:

【中文标题】使用 openCV 在 QT 中进行图像处理【英文标题】:Image Processing in QT using openCV 【发布时间】:2013-03-27 14:22:53 【问题描述】:

我在 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 变量时,我得到了运行时错误。

请帮我解决这个问题。 我正在尝试处理的图像如下

【问题讨论】:

你的调试器说什么? 当我点击构建时。它正在建设中没有任何问题。当我点击运行时,我收到错误“程序已意外完成。” 这些都不是你的调试器。点击上面有甲虫的播放按钮,Qt Creator 将通过调试器启动您的应用程序并打开调试透视图。 【参考方案1】:

只评论区块:

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 可能有问题。但作为一种有效的方法,您应该逐步调试

【讨论】:

我评论了所有并且我只启用了 cv::mat matOrg;我开始收到错误 D:\\temp\\Test_mar26-5-1.bmp 文件真的存在吗?【参考方案2】:

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

【讨论】:

【参考方案3】:

您可以尝试根据您添加的.lib 文件将OpenCV .dll 文件添加到您的.exe 文件的同一目录中。

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

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

【讨论】:

以上是关于使用 openCV 在 QT 中进行图像处理的主要内容,如果未能解决你的问题,请参考以下文章

windows平台下基于QT和OpenCV搭建图像处理平台

Qt-OpenCV:如何在 Qt 中显示灰度图像(opencv)

VS 2019配置QT和Opencv调用DNN模块进行图像分类

VS 2019配置QT和Opencv调用DNN模块进行图像分类

杂例 01=VS 2019配置QT和Opencv调用DNN模块进行图像分类

OpenCV实战——OpenCV与图像处理