windows 在 Qt 中配置 OpenCv
Configuration OpenCv in Qt in windows
我正在从事人工视觉项目,该项目需要用于用户交互的 GUI。
在寻找了一些可能的解决方案之后,我决定使用 Qt 进行编程。
我按照我找到的一些教程进行操作,但最后我总是遇到同样的问题:如果我输入一些 opencv 代码,程序在启动后崩溃。
我正在使用 opencv 2.4.10 和 Qt 5.3.2 以及 Visual Studio 编译器(32 位的 MSCV 2010)。
出于学习目的,我正在尝试部署以下项目:
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
main.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 中显示一个图像。
我得到的应用程序输出是:
Starting C:\Users\Virtualmech\Documents\opencvButton\debug\opencvButton.exe...
The program has unexpectedly finished.
C:\Users\Virtualmech\Documents\opencvButton\debug\opencvButton.exe crashed
而这甚至没有开始。
如果我在mainwindow.cpp中注释opencv相关代码,程序运行完美
现在,如果我只声明(没有定义)一个 Mat 实例,应用程序将退出 运行,并再次显示相同的输出。
我想一定是配置问题,但是我找不到。
谁能给点线索?
感谢您的帮助和时间。
我想你忘了将必要的 dll 放在你正在尝试 运行 的可执行文件旁边,在你的调试文件夹中。
要找出您缺少哪些 dll,请尝试直接 运行 程序,而不是通过 Qt Creator 的界面。
我正在从事人工视觉项目,该项目需要用于用户交互的 GUI。
在寻找了一些可能的解决方案之后,我决定使用 Qt 进行编程。
我按照我找到的一些教程进行操作,但最后我总是遇到同样的问题:如果我输入一些 opencv 代码,程序在启动后崩溃。
我正在使用 opencv 2.4.10 和 Qt 5.3.2 以及 Visual Studio 编译器(32 位的 MSCV 2010)。
出于学习目的,我正在尝试部署以下项目:
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
main.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 中显示一个图像。
我得到的应用程序输出是:
Starting C:\Users\Virtualmech\Documents\opencvButton\debug\opencvButton.exe...
The program has unexpectedly finished.
C:\Users\Virtualmech\Documents\opencvButton\debug\opencvButton.exe crashed
而这甚至没有开始。
如果我在mainwindow.cpp中注释opencv相关代码,程序运行完美
现在,如果我只声明(没有定义)一个 Mat 实例,应用程序将退出 运行,并再次显示相同的输出。
我想一定是配置问题,但是我找不到。
谁能给点线索?
感谢您的帮助和时间。
我想你忘了将必要的 dll 放在你正在尝试 运行 的可执行文件旁边,在你的调试文件夹中。
要找出您缺少哪些 dll,请尝试直接 运行 程序,而不是通过 Qt Creator 的界面。