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()
相关推荐
咬_咬14 分钟前
go语言学习(函数)
开发语言·学习·golang
豆瓣鸡30 分钟前
Agent实战练习
java·python·学习
y = xⁿ1 小时前
Redis八股学习日记:数据结构;跳表的底层;Reids的事务机制
数据结构·redis·学习
炽烈小老头1 小时前
【每天学习一点算法 2026/04/29】最长连续序列
学习·算法
库奇噜啦呼1 小时前
【iOS】源码学习-类与对象底层原理
学习·ios·cocoa
不灭锦鲤1 小时前
网络安全学习第98天
学习·安全
星幻元宇VR2 小时前
VR自行车骑行模拟系统|让交通安全教育“骑”进现实
科技·学习·安全·vr
知识分享小能手2 小时前
R语言入门学习教程,从入门到精通,R语言数值关系数据可视化 - 完整知识点(5)
学习·信息可视化·r语言
嵌入式小企鹅5 小时前
CPU供需趋紧、DeepSeek V4全链适配、小米开源万亿模型
人工智能·学习·开源·嵌入式·小米·算力·昇腾
三品吉他手会点灯10 小时前
C语言学习笔记 - 20.C编程预备计算机专业知识 - 变量为什么必须的初始化【重点】
c语言·笔记·学习