使用 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 中进行图像处理的主要内容,如果未能解决你的问题,请参考以下文章
Qt-OpenCV:如何在 Qt 中显示灰度图像(opencv)
VS 2019配置QT和Opencv调用DNN模块进行图像分类
VS 2019配置QT和Opencv调用DNN模块进行图像分类