C++ windows下Qt中OpenCv的配置
我在一个人工视觉项目中工作,该项目需要一个用于用户交互的GUI 在寻找了一些可行的解决方案之后,我决定用Qt编程 我遵循我找到的一些教程,但最后我总是遇到同样的问题:如果我键入一些opencv代码,程序启动后就会崩溃 我正在使用opencv 2.4.10和Qt 5.3.2以及Visual Studio编译器(32位的MSCV 2010) 出于学习目的,我尝试部署以下项目:C++ windows下Qt中OpenCv的配置,c++,qt,opencv,qt-creator,C++,Qt,Opencv,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_
- 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
\ifndef主窗口 #定义主窗口 #包括 #包括 #包括 #包括 #包括 #包括 #包括 名称空间用户界面{ 类主窗口; } 类主窗口:公共QMainWindow { Q_对象 公众: 显式主窗口(QWidget*parent=0); 专用插槽: 无效把手按钮(); 私人: QPushButton*m_按钮; }; #endif//main窗口
- 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.h” #包括 int main(int argc,char*argv[]) { QApplication应用程序(argc、argv); 主窗口主窗口; mainWindow.showMaximized(); 返回app.exec(); }
- 最后,mainwindow.cpp:
#包括“mainwindow.h”
#包括 使用名称空间cv; 主窗口::主窗口(QWidget*父窗口) :QMainWindow(父级) { //创建按钮,使“this”成为父级 m_按钮=新的QPushButton(“显示图像”,此按钮); //设置按钮的大小和位置 m_按钮->设置几何体(QRect(QPoint(100100),QSize(20050)); //将按钮信号连接到适当的插槽 连接(m_按钮,信号(释放()),此,插槽(把手按钮()); } void主窗口::把手按钮() { //定义图像路径 String imaloc=“C:\\Users\\virtualtech\\Desktop\\ipRedCable.png”; //Mat实例声明图像。 Mat图像; //在Mat实例中加载imaloc图像。 图像=imread(imaloc); if(image.empty()){ QMessageBox::about(这是“错误”,“无法加载图像”); }否则{ //声明窗口的名称 namedWindow(“显示图像”); //显示图像 imshow(“显示图像”,图像); //等待用户交互 等待键(0); //关闭并销毁窗口 销毁所有窗口(); } }
感谢您的帮助和时间。我想您忘了将必要的DLL放在您要运行的可执行文件旁边,放在您案例的debug文件夹中
要找出缺少哪些DLL,请尝试直接运行程序,而不是通过Qt Creator的界面运行程序。我认为您忘记将必要的DLL放在要运行的可执行文件旁边,放在案例中的调试文件夹中
要找出缺少哪些DLL,请尝试直接运行程序,而不是通过Qt Creator的界面运行。谢谢您的回答。我认为输入INCLUDEPATH(for.h)和LIBS(for.lib)的.pro文件行就足够了。现在我明白了我也必须链接.dll。我将尝试包括这些文件并发布反馈。非常感谢。你完全正确。我只需将与.lib文件相关的.dll文件复制到我的项目文件夹中,项目即可完美运行:))谢谢您的回答。我认为输入INCLUDEPATH(for.h)和LIBS(for.lib)的.pro文件行就足够了。现在我明白了我也必须链接.dll。我将尝试包括这些文件并发布反馈。非常感谢。你完全正确。我只需将与.lib文件相关的.dll文件复制到我的项目文件夹中,项目即可完美运行:)
#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();
}
}