百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Qt中添加OpenCV库(qt引入opencv)

itomcoil 2025-01-29 16:13 23 浏览

配置在Qt中的OpenCV,看了很多“教程”,最终成功。记一下过程。

本机配置:

window7 32位系统;

qt-opensource-windows-x86-mingw492-5.5.1;

OpenCV2.4.10。

对于我来说配置过程比较难,因为目前我没用过Qt和Cmake,之前一直用VS编译C++,也没有用过MinGW,所以看教程中的各种命令或者执行文件都比较费时。这次各种尝试后成功。参考资料的连接在最后,其中帮助我最大的就是那一篇纯英文的,很详细。

前期准备

Qt5的opensource版使用的是MinGW,并且不同于Qt4,Qt5不能在QtCreater中更改库文件为vc。而OpenCV在2.4之后就仅仅提供VS版本的库文件,位置在%OpenCV%\build\x86 或 %OpenCV%\build\x64的“vc1x”文件夹中(%OpenCV%表示OpenCV的安装目录)。

上第一个图片为opencv2.4.10中build\x86\的内容;第二个图片为opencv2.3.1中build\x86\的内容。很明显oepencv2.3.1中有一个mingw的库文件夹而opencv2.4.10就仅仅支持vc库了。因为电脑同时有这两个版本的opencv库文件,所以第一次配置我直接使用的是2.3.1版本(不需要重新编译MinGW版本库文件嘛),但是经过下面的正确配置后,测试程序一直无法通过,现象在下面会细说。

基于以上原因,所以必须要在配置Qt前将OpenCV编译成一个MinGW的库文件版本。这也是为什么这么教程里要用一个CMake软件编译OpenCV。到这里,我可以列出在Qt5中配置OpenCV前需要准备的软件:

qt-opensource-windows-x86-mingw492-5.5.1;

cmake-3.6.0-rc3-win32-x86;

opencv2.4.10。

Qt5和cmake版本是我下载的最新版本,现在时间是2016-6-28。以下的内容不会详细讲述每一步配置步骤,在必要的地方我会附上相应的资料,这些资料已经解释地十分详细。这里我着重写的是我在配置中遇到的问题。

Qt5,CMake和OpenCV的安装

安装的教程数不胜数,这里不再赘述。注意windows中的环境变量的配置。

其中在Qt5的安装中注意安装MinGW。我这里的版本是4.9.2,如下图所示。

安装完成Qt5后,注意要将Qt5的路径加入环境变量中,在后面使用CMake编译OpenCV库时,CMake会调用MinGW组件程序,即在安装Qt中勾选的MinGW程序,并且还会调用Qt本身的编译程序qmake.exe,这两个文件的路径都要在环境变量中,具体为:

%Qt5%\Tools\mingw492_32\bin

%Qt5%\5.5\mingw492_32\bin

以上%Qt5%为我的Qt安装目录,例如我的是C:\Qt\Qt5.5.1,则将其代入以上路径后等价于:

C:\Qt\Qt5.5.1\Tools\mingw492_32\bin

C:\Qt\Qt5.5.1\5.5\mingw492_32\bin

OpenCV库的编译

将OpenCV库编译成MinGW版需要使用CMake软件,别的软件是否好用我没有用过。安装时要注意勾选将CMake的路径(Path)加到环境变量中,否则当后面使用控制台(cmd或者powershell)调用CMake编译安装命令时会出现 无效命令的提示。

注意,在安装完成后先不要直接编译OpenCV的MinGW版本,要保证Qt已经安装完成。否则会缺少必要的执行程序导致无法编译成需要的MinGW库。

打开CMake,参考这篇资料选取OpenCV源文件位置和输出文件位置,点击configure。注意,这里我没有完全按照这一篇资料,而是根据另一篇资料的教程。傻瓜式的总结一下,这里需要点击“2次configure 和 1次generate”。

我这里自己选取了C和C++编译器,具体为下图步骤点:

我选取了"Specify native compilers",并在下一步选择了编译器,因为之前直接选取“Use default native compilers”时总是出错,我猜测我的默认编译器不对。

我自己选择的编译器就是Qt中的MinGW中的gcc和g++,如上图。 选取后finish,则进入其他教程中的正常步骤,如下图。

成功后,在第二次configue前,需要有两个地方勾选或者更改,第一个是下图处:

上图选取的地方是CMake生成的configure类型,可以填入Debug和Release,这样生成的库文件就可以指出上面两种版本的编译。

另外必须要勾选下图中的 WITH_QT,以使CMake编译出可以供Qt使用的库文件(我认为就是在这里才会需要cmake去调用qt中的qmake指令)。

至此,就可以点击generate进行生成了。

我在这之后出现了错误,经过查看得知,就是因为CMake会调用qmake执行文件,而我的环境变量的第一行是 C:\Python27\Lib\site-packages\PyQt4(这是因为前人使用这台电脑是安装了PyQt),而这个目录下有一个qmake执行文件,但这个文件不满足本次编译的要求,所以总是出错。于是我将C:\Qt\Qt5.5.1\5.5\mingw492_32\bin%OpenCV_MinGW%\bin插入到前面即可。

这之后就打开控制台软件,依次键入 mingw32-make 和 mingw32-make install ,如之前配置无误,程序就会依次开始编译和安装,下图依次为相应结果:

Qt配置

opencv的MinGW库编译好后,就可以直接在Qt中配置了。Qt的配置是靠Qt工程创建后生成的那个pro文件,通过在pro文件中配置文本即可,pro文件的编写规则和技巧可以参考这篇资料,不再赘述,下面是我的配置文件内容,使用的测试实例是Qt的控制台应用:

QT += core
QT -= gui

TARGET = TestQt
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

INCLUDEPATH += F:/opencv2.4.10/build/include/opencv \
 F:/opencv2.4.10/build/include/opencv2 \
 F:/opencv2.4.10/build/include

LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libcv2.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_calib3d2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_contrib2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_nonfree2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_ocl2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_gpu2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_photo2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_objdetect2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_legacy2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_ml2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_video2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_features2d2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_highgui2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_imgproc2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_flann2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_core2410.dll.a

我写的很麻烦,路径都是复制粘贴好多遍,可以使用 -L 和 -l参数进行简化。在INCLUDEPATH中的文件目录分级斜杠很有意思,我这里用的都是 / (斜杠),根据测试和查阅资料,我发现 \(反斜杠)和 \\(双反斜杠)都可以使用。使用控制台应用作为测试的原因是这样编写测试文件比较简单,并且不会过多牵扯Qt编程的相关结构和知识,测试代码也很简单,如下:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>

using namespace cv;
int main
{
    std::cout<<"fuck"<<std::endl;
    Mat img;
    img = imread("D:/c.jpg");
    imshow("test", img);
    waitKey;return 0;
}

测试成功截图如下:

在配置过程中,原先使用opencv2.3.1,这个库中就有mingw版的库文件,无需用source文件重新编译(这个版本的opencv很奇怪的没有source文件夹,而2.4.x之后的版本与这个版本的文件组织结构差别很大)。原以为是一个方便,但实际使用QT时发现,就算我的.pro文件配置好也不能正常运行测试程序,即显示出一张图片(之所以认为我的配置文件配置好是由于在配置完pro文件后,编写代码过程中使用include时可以索引到opencv库中的头文件)。现象是只要使用opencv的函数就不能正常运行程序,程序开头的打印字符串都没有显示,末尾的打印字符串更是不能出现。另一个现象是,当使用Mat关键字创建一个Mat类而不进行其他相关opencv()函数调用时,不会出现错误,但只要使用别的函数,例如Mat img; img = imread(...);时就会出错。编译问题没有一条,但就是不能出结果。

参考资料

相关推荐

Python Qt GUI设计:将UI文件转换Python文件三种妙招(基础篇—2)

在开始本文之前提醒各位朋友,Python记得安装PyQt5库文件,Python语言功能很强,但是Python自带的GUI开发库Tkinter功能很弱,难以开发出专业的GUI。好在Python语言的开放...

Connect 2.0来了,还有Nuke和Maya新集成

ftrackConnect2.0现在可以下载了--重新设计的桌面应用程序,使用户能够将ftrackStudio与创意应用程序集成,发布资产等。这个新版本的发布中还有两个Nuke和Maya新集成,...

Magicgui:不会GUI编程也能轻松构建Python GUI应用

什么是MagicguiMagicgui是一个Python库,它允许开发者仅凭简单的类型注解就能快速构建图形用户界面(GUI)应用程序。这个库基于Napari项目,利用了Python的强大类型系统,使得...

Python入坑系列:桌面GUI开发之Pyside6

阅读本章之后,你可以掌握这些内容:Pyside6的SignalsandSlots、Envents的作用,如何使用?PySide6的Window、DialogsandAlerts、Widgets...

Python入坑系列-一起认识Pyside6 designer可拖拽桌面GUI

通过本文章,你可以了解一下内容:如何安装和使用Pyside6designerdesigner有哪些的特性通过designer如何转成python代码以前以为Pyside6designer需要在下载...

pyside2的基础界面(pyside2显示图片)

今天我们来学习pyside2的基础界面没有安装过pyside2的小伙伴可以看主页代码效果...

Python GUI开发:打包PySide2应用(python 打包pyc)

之前的文章我们介绍了怎么使用PySide2来开发一个简单PythonGUI应用。这次我们来将上次完成的代码打包。我们使用pyinstaller。注意,pyinstaller默认会将所有安装的pack...

使用PySide2做窗体,到底是怎么个事?看这个能不能搞懂

PySide2是Qt框架的Python绑定,允许你使用Python创建功能强大的跨平台GUI应用程序。PySide2的基本使用方法:安装PySide2pipinstallPy...

pycharm中conda解释器无法配置(pycharm安装的解释器不能用)

之前用的好好的pycharm正常配置解释器突然不能用了?可以显示有这个环境然后确认后可以conda正在配置解释器,但是进度条结束后还是不成功!!试过了pycharm重启,pycharm重装,anaco...

Conda使用指南:从基础操作到Llama-Factory大模型微调环境搭建

Conda虚拟环境在Linux下的全面使用指南:从基础操作到Llama-Factory大模型微调环境搭建在当今的AI开发与数据分析领域,conda虚拟环境已成为Linux系统下管理项目依赖的标配工具。...

Python操作系统资源管理与监控(python调用资源管理器)

在现代计算环境中,对操作系统资源的有效管理和监控是确保应用程序性能和系统稳定性的关键。Python凭借其丰富的标准库和第三方扩展,提供了强大的工具来实现这一目标。本文将探讨Python在操作系统资源管...

本地部署开源版Manus+DeepSeek创建自己的AI智能体

1、下载安装Anaconda,设置conda环境变量,并使用conda创建python3.12虚拟环境。2、从OpenManus仓库下载代码,并安装需要的依赖。3、使用Ollama加载本地DeepSe...

一文教会你,搭建AI模型训练与微调环境,包学会的!

一、硬件要求显卡配置:需要Nvidia显卡,至少配备8G显存,且专用显存与共享显存之和需大于20G。二、环境搭建步骤1.设置文件存储路径非系统盘存储:建议将非安装版的环境文件均存放在非系统盘(如E盘...

使用scikit-learn为PyTorch 模型进行超参数网格搜索

scikit-learn是Python中最好的机器学习库,而PyTorch又为我们构建模型提供了方便的操作,能否将它们的优点整合起来呢?在本文中,我们将介绍如何使用scikit-learn中的网格搜...

如何Keras自动编码器给极端罕见事件分类

全文共7940字,预计学习时长30分钟或更长本文将以一家造纸厂的生产为例,介绍如何使用自动编码器构建罕见事件分类器。现实生活中罕见事件的数据集:背景1.什么是极端罕见事件?在罕见事件问题中,数据集是...