从0到机器视觉工程师(六):配置OpenCV和Qt环境

CMake配置OpenCV

CMakeLists.txt文件的编写

cmake_minimum_required(VERSION 3.20)

project(test_opencv LANGUAGES CXX)

#寻找Opencv库

FIND_PACKAGE(OpenCV REQUIRED)

include_directories(test_opencv ${OpenCV_INCLUDE_DIRS})

add_executable(test_opencv main.cpp)

TARGET_LINK_LIBRARIES({PROJECT_NAME} {OpenCV_LIBS})

可能出现的错误

错误原因分析

CMake Error at CMakeLists.txt:4 (FIND_PACKAGE):

By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has

asked CMake to find a package configuration file provided by "OpenCV", but

CMake did not find one.

Could not find a package configuration file provided by "OpenCV" with any

of the following names:

OpenCVConfig.cmake

opencv-config.cmake

Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set

"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"

provides a separate development package or SDK, be sure it has been

installed.

Configuring incomplete, errors occurred!

这个错误信息表明 CMake 在尝试找到 OpenCV 库时遇到了问题。具体来说,CMake 无法找到 OpenCV 的配置文件 OpenCVConfig.cmake 或 opencv-config.cmake。这些配置文件通常包含 OpenCV 库的路径和其他相关信息,CMake 需要这些信息来正确地配置和链接 OpenCV。

解决方案

方案一

在CMakeLists.txt文件中直接设置 OpenCV_DIR 变量

cmake_minimum_required(VERSION 3.20)

project(MyProject)

set(OpenCV_DIR "/path/to/opencv/build")

find_package(OpenCV REQUIRED)

修改后的CMakeLists.txt文件

cmake_minimum_required(VERSION 3.20)

project(test_opencv LANGUAGES CXX)

set(OpenCV_DIR "D:\\opencv\\build")

#寻找OpenCv库

FIND_PACKAGE(OpenCV REQUIRED)

include_directories(test_opencv ${OpenCV_INCLUDE_DIRS})

add_executable(test_opencv main.cpp)

#链接OpenCv静态库

TARGET_LINK_LIBRARIES({PROJECT_NAME} {OpenCV_LIBS})

方案二

在 Windows 系统上,在命令提示符中设置环境变量:

打开cmd输入以下内容

set OpenCV_DIR=C:\path\to\opencv\build

然后重新运行 CMake即可

CMake配置Qt+OpenCV

CMakeLists.txt文件的编写

cmake_minimum_required(VERSION 3.20)

project(test_qt LANGUAGES CXX)

#QT需要额外配置开启这三个参数

set(CMAKE_AUTOMOC ON)#元编译,如果类中使用了Q_OBJECT宏,则必须启用自动元编译

set(CMAKE_AUTORCC ON)#资源qrc

set(CMAKE_AUTOUIC ON)#qt自动处理UIC

#寻找qt库

find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)

#不设置OpenCV_DIR会出现找不到OpenCVConfig.cmake或opencv-config.cmake的错误

set(OpenCV_DIR "D:\\opencv\\build")

#寻找OpenCv库

FIND_PACKAGE(OpenCV REQUIRED)

#添加文件树

file(

GLOB _SRCS

main.cpp

MainWindow.h

MainWindow.cpp

)

#不设置OpenCV_DIR会出现找不到OpenCVConfig.cmake或opencv-config.cmake的错误

include_directories({PROJECT_NAME} {OpenCV_INCLUDE_DIRS})

add_executable({PROJECT_NAME} {_SRCS})

target_link_libraries({PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::Widgets {OpenCV_LIBS})

点击配置、生成、打开项目,就可以成功运行啦!!!

提醒

使用CMake成功生成项目打开后运行可能会出现运行不成功的问题,这时候很大可能是CMakeLists.txt文件编写上的错误,切记注意字母大小写,大部分问题都出在这上面。

qmake配置OpenCV

打开Qt Creator,使用qmake来构建一个项目,构建完成后打开.pro文件

添加如下代码:

#配置opencv

INCLUDEPATH += D:/opencv/build/include \

D:/opencv/build/include/opencv2

Debug: {

LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455d

}

Release: {

LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455

}

代码解释:

INCLUDEPATH

  • INCLUDEPATH += D:/opencv/build/include \ D:/opencv/build/include/opencv2 :
    • 作用 :INCLUDEPATH 是一个变量,用于指定编译器在编译时搜索头文件的路径。
    • 路径 :
      • D:/opencv/build/include:这是 OpenCV 的主头文件目录,通常包含一些通用的头文件。
      • D:/opencv/build/include/opencv2:这是 OpenCV 的模块头文件目录,包含 OpenCV 的各个模块的头文件,如 core、imgproc 等。
    • 目的 :通过将这些路径添加到 INCLUDEPATH,编译器可以在编译时找到 OpenCV 的头文件,从而避免编译错误。

Debug 配置

  • Debug: { LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455d } :
    • 作用:在调试模式下,将 OpenCV 的调试库添加到项目的链接库中。
    • LIBS:这是一个变量,用于指定链接器在链接时需要链接的库文件。
    • -l:这是链接器的选项,用于指定要链接的库文件。通常后面紧跟库文件的名称。
    • D:/opencv/build/x64/vc15/lib/opencv_world455d :
      • 路径 :D:/opencv/build/x64/vc15/lib/ 是 OpenCV 的调试库文件所在的目录。
      • 库文件 :opencv_world455d 是 OpenCV 的调试库文件。d 后缀表示调试版本。
    • 目的:在调试模式下,使用调试版本的 OpenCV 库,以便进行调试和错误跟踪。

Release 配置

  • Release: { LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455 } :
    • 作用:在发布模式下,将 OpenCV 的发布库添加到项目的链接库中。
    • LIBS:与调试配置相同,用于指定链接器需要链接的库文件。
    • -l:与调试配置相同,用于指定要链接的库文件。
    • D:/opencv/build/x64/vc15/lib/opencv_world455 :
      • 路径:与调试配置相同,是 OpenCV 的发布库文件所在的目录。
      • 库文件 :opencv_world455 是 OpenCV 的发布库文件。没有 d 后缀表示发布版本。
    • 目的:在发布模式下,使用发布版本的 OpenCV 库,以便生成最终的可执行文件。

.pro文件完整代码

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

You can make your code fail to compile if it uses deprecated APIs.

In order to do so, uncomment the following line.

#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \

main.cpp \

mainwindow.cpp

HEADERS += \

mainwindow.h

FORMS += \

mainwindow.ui

#配置opencv

INCLUDEPATH += D:/opencv/build/include \

D:/opencv/build/include/opencv2

Debug: {

LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455d

}

Release: {

LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455

}

Default rules for deployment.

qnx: target.path = /tmp/$${TARGET}/bin

else: unix:!android: target.path = /opt/$${TARGET}/bin

!isEmpty(target.path): INSTALLS += target

如此一来,在Qt中OpenCV就已经配置完成啦!!!

使用时可能出现的问题

原因分析

编译器无法找到 QMainWindow 头文件。这通常是因为 Qt 的安装路径或配置不正确导致的。

解决方案

在.pro文件中加入以下代码

QMAKE_PROJECT_DEPTH = 0

这行代码设置 QMAKE_PROJECT_DEPTH = 0 是为了确保你的项目文件在构建系统中的路径解析是正确的。这通常用于避免在处理路径时产生意外的行为。

相关推荐
把我格子衫拿来38 分钟前
鼠标点到哪里才算选中?Qt 与 VTK 的拾取坐标、DPI 与体素定位
python·qt·vtk·坐标变换·三维交互
晨间晓40 分钟前
图片里的角点在哪里?用华为云码道开发 OpenCV Harris 角点检测工具
人工智能·opencv·华为云
晨间晓12 小时前
图片细节丰富不丰富?用华为云码道开发 OpenCV 纹理复杂度分析工具
人工智能·opencv·华为云
Lhan.zzZ14 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
richard_yuu1 天前
OpenCV 实战第 15 篇:G-API 图计算,工业流水线的 CPU/GPU 混合执行
人工智能·opencv·计算机视觉
Quz1 天前
QML TabBar 标签栏交互效果合集
qt·动画·qml
老唐7771 天前
OpenCV5实测:纯CPU跑YOLO26目标检测
图像处理·人工智能·opencv·yolo·目标检测·计算机视觉
把我格子衫拿来1 天前
PnP 位姿估计:从二维像素求三维姿态,为什么 tvec 不是相机位置?
python·opencv·计算机视觉·pnp·相机位姿
晨间晓1 天前
图片边缘主要朝哪里?用华为云码道开发 OpenCV 梯度方向分析工具
人工智能·opencv·华为云
把我格子衫拿来1 天前
手眼标定:相机与机械臂如何建立坐标关系?从 AX=XB 到 OpenCV 实践
python·opencv·机器人·手眼标定·坐标变换