Windows下QT开发一个OpenCV程序

openCV 下载

https://opencv.org/releases/

Windows下CMake的下载与安装

下载地址点击这里!

CMake 是一个跨平台的开源构建系统生成工具,旨在简化软件项目的构建过程,支持多种编程语言,尤其在 C、C++ 项目中应用广泛。

核心功能与优势

跨平台支持:CMake 能够在 Windows、Linux、macOS 等多种操作系统上工作。它根据不同平台的特性,生成相应的原生构建文件,如在 Linux 上生成 Makefile,在 Windows 上生成 Visual Studio 项目文件(.vcxproj),这使得开发者可以用一套 CMake 配置文件管理不同平台的构建,大大提高了项目的可移植性。

简化构建配置:相比于直接编写复杂的 Makefile 或其他平台特定的构建脚本,CMake 使用简单的语法来描述项目的构建规则。例如,通过add_executable命令指定生成可执行文件,add_library命令添加库文件,开发者只需关注项目的源文件组成和依赖关系,而不必深入了解不同平台构建系统的细节。

依赖管理:CMake 可以方便地处理项目的依赖关系。它能够查找系统中已安装的库,也支持下载和构建外部依赖库。例如,使用find_package命令查找像 OpenCV 这样的常用库,并自动链接相关的头文件和库文件,确保项目正确使用外部依赖。







编译:mingw版本



bash 复制代码
mingw32-make -j 8
bash 复制代码
mingw32-make install

查看

Qt开发的第一个OpenCV程序

QT 工程新建








将编译后的库复制都工程目录下

主代码

bash 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/opencv.hpp>
#include <Qdebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 读取图像
    cv::Mat image = cv::imread("D:/QT_openCV_pro/pro_01/untitled_02/src/1.png");

    // 检查图像是否成功读取
    if (image.empty()) {
        std::cout << "Could not open or find the image" << std::endl;

    }

    // 显示图像
    cv::imshow("Display window", image);
    int key = cv::waitKey(0); // 等待按键按下

    // 根据按下的按键进行不同操作
    if (key == 's') {
        // 保存图像
        cv::imwrite("saved_image.jpg", image);
        std::cout << "Image saved as saved_image.jpg" << std::endl;
    }
 
}

MainWindow::~MainWindow()
{
    delete ui;
}

qmake 工程

cmake 工程

bash 复制代码
cmake_minimum_required(VERSION 3.16)

project(untitled_03 VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 库文件所在目录
set(MYLIB_DIR D:/ljl/FPGA/QT_openCV_pro/pro_01/untitled_03/OpenCV_lib)
#头文件所在目录
set(MYLIB_INCLUDE_DIR D:/ljl/FPGA/QT_openCV_pro/pro_01/untitled_03/OpenCV_lib/include)
# 需要添加的库。罗列在这里
SET(MYLIB_LIB
    libopencv_core4130.dll.a
    libopencv_calib3d4130.dll.a
    libopencv_dnn4130.dll.a
    libopencv_features2d4130.dll.a
    libopencv_flann4130.dll.a
    libopencv_gapi4130.dll.a
    libopencv_highgui4130.dll.a
    libopencv_imgcodecs4130.dll.a
    libopencv_imgproc4130.dll.a
    libopencv_ml4130.dll.a
    libopencv_objdetect4130.dll.a
    libopencv_photo4130.dll.a
    libopencv_stitching4130.dll.a
    libopencv_video4130.dll.a
    libopencv_videoio4130.dll.a
)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(untitled_03
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )

else()
    if(ANDROID)
        add_library(untitled_03 SHARED
            ${PROJECT_SOURCES}
        )
    else()
        add_executable(untitled_03
            ${PROJECT_SOURCES}
        )
    endif()
endif()

# 设置头文件路径
target_include_directories(untitled_03 PRIVATE ${MYLIB_INCLUDE_DIR})

# 设置链接目录
target_link_directories(untitled_03  PRIVATE  ${MYLIB_DIR}/lib)

# 链接库
target_link_libraries(untitled_03 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets  )
target_link_libraries(untitled_03 PRIVATE
    ${MYLIB_DIR}/lib/${MYLIB_LIB}
)

if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.untitled_03)
endif()
set_target_properties(untitled_03 PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS untitled_03
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(untitled_03)
endif()
相关推荐
hhcgchpspk3 分钟前
xss漏洞学习笔记
笔记·学习·网络安全·xss
情绪总是阴雨天~10 分钟前
OCR光学字符识别技术:完整原理与实战学习笔记
笔记·学习·ocr
searchforAI14 分钟前
B站视频怎么转文字稿?AI自动总结要点+生成思维导图教程
人工智能·笔记·学习·ai·语音识别·知识管理·视频总结
只做人间不老仙18 分钟前
C++ grpc 拦截器示例学习
开发语言·c++·学习
踏着七彩祥云的小丑19 分钟前
Go学习第7天:Map集合 + 递归函数 + 类型转换
开发语言·学习·golang·go
me83222 分钟前
【AI】Langchain4j开发学习笔记
人工智能·笔记·学习
LuminousCPP22 分钟前
数据结构 - 单链表第一篇:单链表基础操作
c语言·数据结构·经验分享·笔记·学习
wubba lubba dub dub75025 分钟前
【无标题】
学习
YM52e36 分钟前
鸿蒙PC ArkTS 异常处理深度解析与最佳实践
学习·华为·harmonyos
qeen8740 分钟前
【C++】类与对象之零散知识点补充(四)
c++·笔记·学习·语法