在 Windows 中的 Qt 中配置 OpenCv
Posted
技术标签:
【中文标题】在 Windows 中的 Qt 中配置 OpenCv【英文标题】:Configuration OpenCv in Qt in windows 【发布时间】:2016-11-23 12:02:00 【问题描述】:我正在从事一个人工视觉项目,该项目需要 GUI 进行用户交互。
在寻找一些可能的解决方案后,我决定使用 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
主窗口.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 中显示一个图像。
我得到的应用程序输出是:
正在启动 C:\Users\Virtualmech\Documents\opencvButton\debug\opencvButton.exe...
程序意外结束。
C:\Users\Virtualmech\Documents\opencvButton\debug\opencvButton.exe 崩溃
这甚至没有开始。
如果我在mainwindow.cpp中注释opencv相关代码,程序运行完美。
现在,如果我只声明(不定义)一个 Mat 实例,应用程序将停止运行,并再次显示相同的输出。
我觉得应该是配置问题,但是找不到。
谁能给点线索?
感谢您的帮助和时间。
【问题讨论】:
【参考方案1】:我认为您忘记将必要的 dll 放在您尝试运行的可执行文件旁边,在您的案例中的调试文件夹中。
要找出您缺少哪些 dll,请尝试直接运行程序,而不是通过 Qt Creator 的界面来运行。
【讨论】:
感谢您的回答。我认为通过输入 INCLUDEPATH(对于 .h)和 LIBS(对于 .lib)的 .pro 文件行就足够了。现在我明白我也必须链接 .dlls 。我将尝试包含这些文件并发布反馈。 非常感谢。你完全正确。我只是将与我的 .lib 文件相关的文件复制到我的项目文件夹 .dll 中,并且项目运行完美:))以上是关于在 Windows 中的 Qt 中配置 OpenCv的主要内容,如果未能解决你的问题,请参考以下文章