简介

opencv是一个开源的跨平台的计算机视觉库。

Qt中集成opencv环境

  1. 下载安装Windows的opencv版本为opencv4.7.0
  2. 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)

测试程序

  1. 测试程序如下所示:
#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;
}