简介
opencv是一个开源的跨平台的计算机视觉库。
Qt中集成opencv环境
- 下载安装Windows的opencv版本为opencv4.7.0
- CMAKE配置如下:
cmake_minimum_required(VERSION 3.20)
project(OpenCVTest VERSION 1.0 LANGUAGES CXX)
find_package(QT NAMES Qt5 REQUIRED COMPONENTS Core Gui Widgets PrintSupport )
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui Widgets PrintSupport)
# 设置源文件编码为UTF-8
#if(MSVC)
# add_compile_options(/utf-8)
#endif()
# 自动处理Qt的moc、uic、rcc
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
message(STATUS "CMAKE_CURRENT_BINARY_DIR: ${CMAKE_CURRENT_BINARY_DIR}")
# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
file(GLOB copyOpencvDll
"${CMAKE_SOURCE_DIR}/assets/opencv_videoio_ffmpeg470_64.dll"
"${CMAKE_SOURCE_DIR}/assets/opencv_world470d.dll"
# solve problem:Failed to load OpenH264 library: openh264-1.8.0-win64.dll
"${CMAKE_SOURCE_DIR}/assets/openh264-1.8.0-win64.dll"
)
ELSE()
file(GLOB copyOpencvDll
"${CMAKE_SOURCE_DIR}/assets/opencv_videoio_ffmpeg470_64.dll"
"${CMAKE_SOURCE_DIR}/assets/opencv_world470.dll"
# solve problem:Failed to load OpenH264 library: openh264-1.8.0-win64.dll
"${CMAKE_SOURCE_DIR}/assets/openh264-1.8.0-win64.dll"
)
ENDIF()
file(COPY ${copyOpencvDll} DESTINATION ${CMAKE_BINARY_DIR})
# 源文件列表
file(GLOB PROJECT_SOURCES
"${CMAKE_SOURCE_DIR}/src/*.cpp"
)
message("PROJECT_SOURCES:${PROJECT_SOURCES}")
# 设置 UI 文件搜索路径
set(CMAKE_AUTOUIC_SEARCH_PATHS
"${CMAKE_SOURCE_DIR}/ui"
)
# UI文件
file(GLOB UI_FILES
"${CMAKE_SOURCE_DIR}/ui/*.ui"
)
# 资源文件
file(GLOB RESOURCE_FILES
"${CMAKE_SOURCE_DIR}/res/*.qrc"
)
# 创建可执行文件
file(GLOB HEADERS
"${CMAKE_SOURCE_DIR}/include/*.h"
)
IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
# Debug模式显示用于调试的控制台
ADD_EXECUTABLE(${PROJECT_NAME}
${HEADERS} #MOC处理使用了Qt元系统的头文件
${PROJECT_SOURCES}
${RESOURCE_FILES}
${UI_FILES})
ELSE()
# Release模式不显示控制台
ADD_EXECUTABLE(${PROJECT_NAME} WIN32
${HEADERS} #MOC处理使用了Qt元系统的头文件
${PROJECT_SOURCES}
${RESOURCE_FILES}
${UI_FILES})
ENDIF()
# 设置 MOC选项和生成路径
set_target_properties(${PROJECT_NAME} PROPERTIES
AUTOMOC_MOC_OPTIONS "-I${CMAKE_CURRENT_SOURCE_DIR}/include"
)
# 包含目录
target_include_directories(${PROJECT_NAME} PRIVATE
"${CMAKE_SOURCE_DIR}/include"
"${CMAKE_SOURCE_DIR}/third_party/libopencv-4.7/include"
)
IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
file(GLOB copyOpencvLib
"${CMAKE_SOURCE_DIR}/third_party/libopencv-4.7/lib/debug/opencv_world470d.lib"
)
ELSE()
file(GLOB copyOpencvLib
"${CMAKE_SOURCE_DIR}/third_party/libopencv-4.7/lib/release/opencv_world470.lib"
)
ENDIF()
# 链接Qt库及第三方库
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::PrintSupport
${copyOpencvLib}
)
# 开启 MOC 调试输出
set(CMAKE_AUTOMOC_VERBOSE ON)
测试程序
- 测试程序如下所示:
#include <opencv2/opencv.hpp>
int main(int argc, char* argv[])
{
cv::Mat pic = cv::imread("test.png");
cv::namedWindow("picture viewer");
cv::imshow("picture viewer", pic);
cv::waitKey();
return 0;
}
浙公网安备 33010602011771号