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
是为了确保你的项目文件在构建系统中的路径解析是正确的。这通常用于避免在处理路径时产生意外的行为。