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()
相关推荐
Qhumaing17 小时前
C++学习:【PTA】数据结构 7-1 实验6-1(图-邻接矩阵)
c++·学习·算法
乐观主义现代人17 小时前
redis 源码学习笔记
redis·笔记·学习
YJlio17 小时前
Registry Usage (RU) 学习笔记(15.5):注册表内存占用体检与 Hive 体量分析
服务器·windows·笔记·python·学习·tcp/ip·django
奔波霸的伶俐虫18 小时前
windows docker desktop 安装修改镜像学习
学习·docker·容器
BullSmall18 小时前
《逍遥游》
学习
奔波霸的伶俐虫18 小时前
spring boot集成kafka学习
spring boot·学习·kafka
CCPC不拿奖不改名18 小时前
面向对象编程:继承与多态+面试习题
开发语言·数据结构·python·学习·面试·职场和发展
GHL28427109018 小时前
通义千问的 Function Call - demo学习
学习·ai·ai编程
知识分享小能手18 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中的服务器 —— 知识点详解 (22)
服务器·学习·ubuntu