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()
相关推荐
进阶小白猿1 小时前
Java技术八股学习Day30
java·开发语言·学习
近津薪荼1 小时前
优选算法——双指针6(单调性)
c++·学习·算法
修修修也1 小时前
【无标题】技术欲望是怎样渐进增长的?
学习
whale fall2 小时前
celery -A tool.src.main worker --loglevel=info --queues=worker1_queue & 什么意思
python·学习·apache
wotaifuzao3 小时前
【Keil 5安装】keil 5最新版本安装+环境配置+下载百度资源分享(安装包,注册机等)
stm32·单片机·嵌入式硬件·mcu·学习·keil5·最新keil
3108748764 小时前
0005.C/C++学习笔记5
c语言·c++·学习
缘友一世4 小时前
张量并行和流水线并行原理深入理解与思考
学习·llm·pp·tp
楼田莉子4 小时前
C++现代特性学习:C++14
开发语言·c++·学习·visual studio
阳光九叶草LXGZXJ4 小时前
达梦数据库-学习-50-分区表指定分区清理空洞率(交换分区方式)
linux·运维·数据库·sql·学习
慎独4135 小时前
重置学习系统:唤醒孩子的“双引擎”学习力
学习