我正在一个人工视觉项目中工作,这需要用户交互GUI。在Qt窗口中配置OpenCv
寻找一些posibles解决方案后,我决定用Qt编程。
我按照我发现的一些教程,但最后我总是有同样的问题:如果我键入一些opencv代码,程序启动后崩溃。
我正在使用Visual Studio编译器(MSCV 2010 for 32bit)使用opencv 2.4.10和Qt 5.3.2。
对于学习的目的我想部署以下项目:
opencvButton.pro:
QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = opencvButton TEMPLATE = app INCLUDEPATH += C:\\opencv\\build\\include LIBS += -LC:\\opencv\\build\\x86\\vc10\\lib \ -lopencv_calib3d2410d \ -lopencv_contrib2410d \ -lopencv_core2410d \ -lopencv_features2d2410d \ -lopencv_flann2410d \ -lopencv_gpu2410d \ -lopencv_highgui2410d \ -lopencv_imgproc2410d \ -lopencv_legacy2410d \ -lopencv_ml2410d \ -lopencv_nonfree2410d \ -lopencv_objdetect2410d \ -lopencv_ocl2410d \ -lopencv_photo2410d \ -lopencv_stitching2410d \ -lopencv_superres2410d \ -lopencv_ts2410d \ -lopencv_video2410d \ -lopencv_videostab2410d SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui
mainwindow.h:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPushButton> #include <QMessageBox> #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); private slots: void handleButton(); private: QPushButton *m_button; }; #endif // MAINWINDOW_H
为主。 cpp:
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow mainWindow; mainWindow.showMaximized(); return app.exec(); }
最后,mainwindow.cpp: 的#include “mainwindow.h”
#include <QCoreApplication> using namespace cv; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { // Create the button, make "this" the parent m_button = new QPushButton("Display image", this); // set size and location of the button m_button->setGeometry(QRect(QPoint(100, 100), QSize(200, 50))); // Connect button signal to appropriate slot connect(m_button, SIGNAL (released()), this, SLOT (handleButton())); } void MainWindow::handleButton() { // Define image path String imaloc = "C:\\Users\\Virtualmech\\Desktop\\ipRedCable.png"; // Mat instance declaration image. Mat image; // Load imaloc image in Mat instance. image = imread(imaloc); if(image.empty()){ QMessageBox::about(this, "Error", "Cannot load image"); }else{ // Declare name of window namedWindow("Display image"); // Show image imshow("Display image", image); // Wait for user interaction waitKey(0); // Close and destroy window destroyAllWindows(); } }
该项目包括在一个单一的按钮,当你点击它,程序应该显示的图像在路径imaloc。
应用输出我得到的是:
开始C:\用户\ Virtualmech \文档\ opencvButton \调试\ opencvButton.exe ...
该方案已完成意外。
C:\用户\ Virtualmech \文档\ opencvButton \调试\ opencvButton.exe坠毁
而且,甚至没有开始。
如果我在mainwindow.cpp中评论opencv相关的代码,程序运行完美。
现在,如果我只是声明(不定义)Mat实例,应用程序将停止运行,并再次显示相同的输出。
我认为它必须是一个配置问题,但我找不到它。
任何人都可以提供任何线索吗?
感谢您的帮助和时间。
感谢您的回答。我认为通过输入**。pro **文件行的** INCLUDEPATH **(对于.h)和** LIBS **(对于.lib)就足够了。现在我明白我必须链接**。dlls **了。我将尝试包含这些文件并发布反馈。 –
非常感谢。你是绝对正确的。我只是复制到我的项目文件夹** .DLL **文件与我的**。lib **文件和项目运行完美:)) –