OpenCV与Qt的环境搭建及Demo

yizhihongxing

OpenCV与Qt的环境搭建及Demo

在本文中,我们将学习如何在Windows操作系统下,搭建OpenCV与Qt的环境,并了解如何用Qt编写并运行一个基础的OpenCV应用。

环境搭建

安装OpenCV

在Windows系统下,安装OpenCV的最简单方法是通过 OpenCV官网的安装程序。下载对应版本的exe文件,按照安装向导逐步完成安装。安装完成后,将OpenCV的bin目录添加至系统环境变量中,方便我们在命令行中使用OpenCV的命令行工具。

安装Qt

Qt是跨平台的应用程序开发框架,它可以方便地创建GUI应用程序。我们可以通过Qt官网下载开源版本的Qt。安装过程中需要选择与Visual Studio相应的版本,这里不再赘述。

通过CMake集成OpenCV和Qt

Qt和OpenCV的集成可以通过CMake实现。首先,需要下载和安装最新版本的CMake。 然后,我们需要设置CMake:

  1. 打开CMake GUI工具。
  2. 在“Where is the source code”框中输入OpenCV和Qt的源代码路径,即OpenCV和Qt源代码解压后的路径。这里我们假设OpenCV和Qt已经下载并解压缩至C:/opencv和C:/Qt,因此路径分别输入C:/opencv/sources和C:/Qt。
  3. 在“Where to build the binaries”框中输入项目构建目录的路径,这里我们假设将项目构建至C:/build目录。
  4. 点击“Configure”按钮,选择使用的IDE,这里我们选择Visual Studio,并确保选中了“Use default native compilers”选项。 CMake将自动检测您的环境并生成默认的配置。
  5. 在缺省配置的基础上,修改以下的几个参数:

  6. OPENCV_DIR:OpenCV的安装目录,这里我们输入C:/opencv/build目录。

  7. Qt5_DIR:Qt的安装目录,这里我们输入C:/Qt/5.13.0/msvc2017_64/lib/cmake/Qt5目录。
  8. CMAKE_BUILD_TYPE:设置构建的类型,可以设置为Debug或Release。在这里,我们选择Release。
  9. CMAKE_PREFIX_PATH:设置Qt的安装路径,这里我们输入C:/Qt/5.13.0/msvc2017_64目录。

  10. 重新点击“Configure”按钮,确保没有出现错误或警告。如果出现错误,可以根据提供的错误信息进行修正。一般情况下,错误信息很容易理解,并成功进行修正。

  11. 点击“Generate”按钮得到Visual Studio的项目。

开发OpenCV与Qt应用程序

创建Qt项目

使用Qt Creator创建Qt project:

  1. 启动Qt Creator。
  2. 选择“File”->“New File or Project”菜单项。
  3. 选择Application -> Qt Widgets Application项目类型,设置项目名称和存储路径。
  4. 选择“Kit Selection”页,选择您的基础开发平台和QT版本。
  5. 选择“Class”页,设置应用程序包含的类的名称和类型。

集成OpenCV

  1. 将OpenCV的头文件路径和库文件路径添加至项目的.pro文件中:

INCLUDEPATH += C:/opencv/build/include/opencv4
LIBS += C:/opencv/build/x64/vc16/lib/opencv_world410.lib

  1. 将OpenCV的dll文件复制到您的项目输出目录下。

编写OpenCV与Qt的应用程序

在Qt项目中,我们可以使用OpenCV库中的函数来进行图像处理,甚至可以用Qt界面展示处理后的图像。

以下是一个使用OpenCV和Qt完成图片灰度处理并显示的示例程序。

#include <QFileDialog>
#include <QImage>
#include <QLabel>
#include <QVBoxLayout>

#include <opencv2/opencv.hpp>

class MainWindow : public QWidget
{
public:
    MainWindow(QWidget *parent = nullptr)
    {
        // 创建GUI部件
        QVBoxLayout *layout = new QVBoxLayout(this);
        m_imageLabel = new QLabel();
        m_imageLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
        layout->addWidget(m_imageLabel);

        // 加载图片
        loadFile();

        // 图片灰度处理
        cvtColor(m_cvImage, m_cvImage, cv::COLOR_BGR2GRAY);

        // 将OpenCV图像转换为Qt图像
        QImage img(m_cvImage.data,
                   m_cvImage.cols,
                   m_cvImage.rows,
                   m_cvImage.step,
                   QImage::Format_Grayscale8);

        // 显示图像
        m_imageLabel->setPixmap(QPixmap::fromImage(img));
    }

private:
    QLabel *m_imageLabel;
    cv::Mat m_cvImage;

    void loadFile()
    {
        // 选择图片文件
        QString fileName = QFileDialog::getOpenFileName(this, "", "", tr("Images (*.png *.jpg)"));
        if (fileName.isEmpty())
            return;

        // 加载图片
        m_cvImage = cv::imread(fileName.toStdString());
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MainWindow window;
    window.show();

    return app.exec();
}

在程序中,我们使用了两个库:Qt和OpenCV。首先,我们用QFileDialog加载了一幅图片,将其转换为OpenCV的图片格式。然后,我们使用OpenCV函数cvtColor将图片转换为灰度图像。最后,我们使用QImage将OpenCV图像转换为Qt图像,并使用QLabel将其展示出来。

通过类似的方法,您可以实现更复杂的应用程序。OpenCV和Qt是两个强大的工具,它们结合使用可以实现更多的图像处理功能。

总结

在本文中,我们讲解了OpenCV和Qt的环境搭建并提供了一个简单的演示程序。希望这篇文章对开发者们有所帮助。如果您需要更深入地研究OpenCV和Qt,可以访问官方文档或参考其他教程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:OpenCV与Qt的环境搭建及Demo - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • C语言基础知识点指针的使用

    那么让我们来详细讲解一下“C语言基础知识点指针的使用”的完整攻略。 一、指针的定义和使用 指针是变量的一种,不同之处在于指针存储的是一个地址,这个地址指向的是另一个变量的位置,而不是存储的实际值。通过指针,我们可以直接操作指向的变量而不需要知道变量的名字。 指针定义的语法格式如下: <数据类型>* <指针变量名>; 其中,数据类型表示…

    other 2023年6月27日
    00
  • mysqld.exe

    以下是关于“mysqld.exe”的完整攻略: mysqld.exe是什么? mysqld.exe是MySQL数据库服务器的主要可执行文件。它是MySQL服务器的核心组件,负责处理客户端请求、管理数据库和执行查询等任务。如果您想使用MySQL数据库,您需要了解如何使用mysqld.exe。 启动mysqld.exe 要启动mysqld.exe,请按照以下步骤…

    other 2023年5月6日
    00
  • Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】

    Python面向对象程序设计OOP入门教程 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种常用的编程思想和方法。它把现实世界中的事物看作对象,通过封装、继承、多态等概念来描述对象及其之间的关系,以进一步实现程序的模块化、复用、扩展和维护。 在 Python 中,一切事物都是对象。Python 中的面向…

    other 2023年6月26日
    00
  • 一文带你掌握Java LinkedBlockingQueue

    一文带你掌握Java LinkedBlockingQueue Java LinkedBlockingQueue 是一种线程安全的阻塞队列,实现了 BlockingQueue 接口,并通过链表的形式保存元素。本文将详细介绍 LinkedBlockingQueue 的使用方法和注意事项。 LinkedBlockingQueue 的初始化 LinkedBlocki…

    other 2023年6月26日
    00
  • Ajax异步检查用户名是否存在

    下面我将详细讲解“Ajax异步检查用户名是否存在”的完整攻略。 什么是Ajax异步检查用户名是否存在 在编写Web应用程序时,经常需要验证用户提供的信息是否有效,其中包括用户注册时输入的用户名是否已经存在。Ajax异步检查用户名是否存在,就是利用Ajax技术来实现异步交互,通过向服务器发送请求,检查数据库中是否存在该用户名。 整体思路 监听用户名输入框的输入…

    other 2023年6月27日
    00
  • threejs绕轴转 粒子系统 控制器操作等(二)

    Three.js绕轴转:粒子系统控制器操作等(二) 在我们的上一篇文章中,我们已经详细介绍了如何使用Three.js创建一个简单的粒子系统,并使用粒子控制器来对其进行操作。在本篇文章中,我们将进一步介绍如何使用Three.js的核心功能来实现更加复杂的效果,包括绕轴转的效果以及更加细致的粒子系统控制器操作。 一. 绕轴转效果的实现 绕轴转是一种经典的Thre…

    其他 2023年3月28日
    00
  • 什么是人机交互?

    人机交互(HCI,Human-Computer Interaction)是指人类和计算机之间进行交互和通信的过程。这个领域涉及到许多不同的学科,包括计算机科学、心理学、人类学和设计。本文将详细讲解人机交互的完整攻略,包括设计过程、实现细节和测试方法。 1. 设计过程 设计过程是人机交互的核心,它涉及到理解用户需求、设计用户界面、实现系统功能和评估用户满意度。…

    其他 2023年4月19日
    00
  • C语言每日练习之字符串反转

    首先需要明确的是,C语言每日练习之字符串反转是一个比较基础的练习题目,可以帮助初学者巩固字符串相关知识点。下面我将给出详细的攻略。 题目描述 需要编写一个程序,将输入的字符串反转输出,并且不能使用任何现成的反转函数。 分析 要实现字符串的反转,我们需要逐个将字符取出,并将其放置在新的字符串中。其中,需要注意以下几点: 字符串是以\0结尾的。因此,需要在遍历过…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部