基于Qt5的图像交互控件开发(C++实现)

这篇具有很好参考价值的文章主要介绍了基于Qt5的图像交互控件开发(C++实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

博主近期看到海康VM、halcon以及visionpro视觉软件都包含一个图像智能交互控件,然后近期根据其中的技术原理,也基于Qt5仿照开发了一个类似的功能,包含矩形、旋转矩形、任意多边形、圆、圆环、扇环,直线卡尺以及圆卡尺等常用控件,图像智能交互是在计算机视觉领域中常用的技术,用于视觉软件图像ROI,广泛应用于工业自动化、机器视觉等领域。具体效果如下:

Qt5图像智能交互控件


一、图像交互控件

1.1 概述

在机器视觉领域,常用的图像交互控件包括以下几种:

  1. 标注工具(Annotation Tools):标注工具允许用户在图像上进行标注和绘制,例如绘制边界框。这些标注可用于图像分类、目标检测、语义分割等任务的数据标注。

  2. 拖动和调整工具(Drag and Adjust Tools):这些工具允许用户通过拖动或调整图像中的特定区域来进行交互。例如,可以拖动边界框或控制点来调整目标的位置、大小或形状。

  3. 交互式区域选择工具(Interactive Region Selection Tools):这些工具允许用户通过绘制、拖动或选择特定区域来指定感兴趣的区域。例如,用户可以使用矩形选择工具、多边形选择工具或魔棒工具来选择图像中的目标或区域。

  4. 缩放和导航工具(Zoom and Navigation Tools):这些工具用于在图像上进行缩放、平移和导航操作,以便用户可以查看和分析图像的不同部分。常见的缩放和导航工具包括放大、缩小、平移和旋转操作。

  5. 参数调整滑块(Parameter Adjustment Sliders):在机器视觉任务中,一些算法或模型可能需要调整不同的参数或阈值。参数调整滑块允许用户通过滑动滑块来调整参数的值,并实时观察算法或模型的输出变化。

博主采用交互控件写的两个文章如下:
第一个:利用OpenCV与Qt5构建卡尺拟合直线工具(C++实现)
第二个:利用OpenCV与Qt5构建卡尺找圆工具(C++实现)

1.2 图像显示交互功能

本文采用Qt5的QGraphicsView显示图像控件,QGraphicsScene用来管理图形交互控件,Qt5中的QGraphicsView是一个图形视图框架,用于在应用程序中显示和交互2D图形。它是Qt的图形模块(Graphics Module)提供的一部分,为开发者提供了一个灵活的工具来创建基于图形的用户界面。

QGraphicsView的主要功能包括:

  1. 图形显示:QGraphicsView允许开发者在视图中显示2D图形项(Graphics Item),例如图像、文本、几何图形、路径等。这些图形项可以自定义外观、位置和交互行为。

  2. 缩放和平移:通过QGraphicsView,用户可以通过鼠标滚轮或手势来缩放视图中的图形,以及通过鼠标拖动来平移视图。这使用户能够查看和导航大型或超出视图边界的图形。

  3. 坐标系统:QGraphicsView提供了一个坐标系统,允许用户在视图中进行图形项的定位和操作。开发者可以指定视图中的逻辑坐标,并使用这些坐标来添加、移动和变换图形项。

  4. 交互操作:通过QGraphicsView,开发者可以实现丰富的交互功能,例如选择图形项、拖动图形项、缩放选定的图形项等。这些交互操作可以通过重写相应的事件处理函数来实现。

  5. 双缓冲绘制:QGraphicsView使用双缓冲技术,以提供平滑的绘制和动画效果。它可以高效地处理大量图形项的绘制,并自动进行局部更新,以减少绘制的开销。

  6. 视图和场景:QGraphicsView与QGraphicsScene一起使用,QGraphicsScene提供了图形项的容器,并管理它们之间的关系。QGraphicsView充当了场景的视图,用于在窗口中显示场景中的图形项。

1.3 棋盘格功能实现

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

图像显示为棋盘格实现代码如下:

void myqgraphicsview::drawBackground(QPainter * painter, const QRectF & rect)
{
    //绘制灰白棋盘图像背景
    int wid = this->geometry().width();
    int hei = this->geometry().height();
    QPointF m_ptCenter = this->mapToScene(wid / 2, hei / 2);
    QPixmap pix(wid, hei);
    QPainter pter(&pix);
    QColor clr_white(Qt::white);
    QColor clr_gray(240, 240, 240, 240);
    int spacing = 15;
    QColor useColor;
    for (int i = 0; i <= floor(wid / spacing); i++)
    {
        for (int j = 0; j <= floor(hei / spacing); j++)
        {
            useColor = ((i + j) % 2 == 0 ? clr_white : clr_gray);
            pter.fillRect(i*spacing, j*spacing, spacing, spacing, useColor);
        }
    }
    painter->drawImage(rect, pix.toImage());
}

1.4 形状控件基类

QAbstractGraphicsShapeItem是Qt中的一个抽象基类,用于表示具有形状的图形项(Graphics Item)。它是QGraphicsItem的子类,用于在QGraphicsScene中显示和操作2D图形。

QAbstractGraphicsShapeItem的主要特征和功能如下:

  1. 形状定义:它定义了一个图形项的形状,可以是矩形、椭圆、多边形等。开发者可以通过重写shape()函数来自定义形状。

  2. 外观样式:它具有一系列用于设置图形项外观的函数,如设置边框颜色、填充颜色、线宽等。通过这些函数,可以定制图形项的外观样式。

  3. 碰撞检测:它提供了一些用于碰撞检测的函数,如collidesWithItem()和collidesWithPath()。这些函数可用于判断图形项与其他图形项或路径是否发生碰撞。

  4. 交互操作:通过重写鼠标事件处理函数,可以实现与QAbstractGraphicsShapeItem的交互操作,如鼠标点击、拖动、移动等。可以根据需要进行自定义的交互行为。

  5. 变换和位置:它继承了QGraphicsItem的功能,可以进行图形项的位置设置、旋转、缩放等变换操作。

QAbstractGraphicsShapeItem是一个抽象基类,不能直接实例化,需要通过继承并重写其纯虚函数来创建具体的形状图形项。常见的具体子类包括QGraphicsRectItem(矩形图形项)、QGraphicsEllipseItem(椭圆图形项)和QGraphicsPolygonItem(多边形图形项)等,它们分别提供了矩形、椭圆和多边形形状的图形项。使用QAbstractGraphicsShapeItem及其子类,开发者可以方便地创建具有形状和外观样式的2D图形项,并在QGraphicsScene中进行显示、交互和操作。这为绘图、图形编辑、数据可视化等应用提供了强大的图形绘制和操作功能。

1.5 鼠标交互实现

    virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
    virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
    virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
    virtual void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;

二、功能展示

2.1 图像加载

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.2 图像放大

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.3 图像缩小

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.4 图像自适应

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.5 图像实际大小

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.6 矩形框控件

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.7 旋转矩形框控件

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.8 任意多边形控件

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.9 圆控件

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.10同心圆控件

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.11 扇环控件

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.12 直线卡尺控件

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

2.13 圆卡尺控件

qt图片控件,OpenCV,工业视觉小项目案例,QT5,qt,交互,c++,计算机视觉,目标检测

总结

由于博主能力有限,本篇文章中提及的方法,也难免会有疏漏之处,希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。文章来源地址https://www.toymoban.com/news/detail-755044.html

到了这里,关于基于Qt5的图像交互控件开发(C++实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT5教程-搭建自己的人机交互界面(附代码)(一):QT5安装与环境配置

    本教程目的在于记录自己开发QT项目的学习过程。 适合刚刚接触QT的初学者 。鉴于个人水平有限,必定错误频出,请各位前辈多多指教。 使用QT5.9.9作为开发工具,开发环境为Ubuntu20.04,图形传输需要安装Opencv4.5.5和FFmpeg。消息传输需要配置mqtt模块。 教程要求学习者对C++有基

    2024年02月11日
    浏览(70)
  • 【[Qt]基于QGraphicsView的图像显示控件,支持放大、缩小、鼠标拖动】

    ImageViewer.h文件 ImageViewer.cpp 文件 具体使用代码如下 1、初始化类对象,并加入界面布局中 2、打开图像,并加载到控件中 3、从控件中卸载图片 源码链接:https://download.csdn.net/download/xiaohuihuihuige/87239431 百度云: 链接:https://pan.baidu.com/s/1W-KUlIKUFAktUKFin63N0g 提取码:4g8a

    2024年02月11日
    浏览(62)
  • 基于Qt5开发图形界面——WiringPi调用Linux单板电脑IO

    Qt是一种跨平台的应用程序开发框架。它被广泛应用于图形用户界面(GUI)开发,可以用于构建桌面应用程序、移动应用程序和嵌入式应用程序。Qt提供了丰富的功能和工具,使开发人员可以快速、高效地构建各种类型的应用程序。 下面是一些Qt的主要特点和优势: 跨平台性

    2024年02月10日
    浏览(45)
  • 利用OpenCV与Qt5构建卡尺拟合直线工具(C++实现)

    基于OpenCV与Qt5构建卡尺拟合直线工具 博主近期基于海康Vision Master4.0做了一个工业视觉工程项目,其中就使用到了海康VM的找直线工具,然后博主根据其中的技术原理,也仿照开发了一个类似的功能,基于OpenCV和Qt5构建一个卡尺找直线的工具。卡尺找直线是在计算机视觉领域中

    2024年02月08日
    浏览(59)
  • 利用OpenCV与Qt5构建卡尺找圆工具(C++实现)

    基于OpenCV与Qt5构建卡尺找圆工具 博主近期基于海康Vision Master4.0做了一个工业视觉工程项目,其中就使用到了海康VM的找圆工具,然后博主根据其中的技术原理,也仿照开发了一个类似的功能,基于OpenCV和Qt5构建一个卡尺找圆的工具。卡尺找圆是在计算机视觉领域中常用的技术

    2024年02月10日
    浏览(68)
  • 基于Qt5 实现的简易慕课爬取程序

    Qt 网络下载数据实例 名称:MookScrapy 这个项目主要是使用了 Qt 里面的 QNetworkAccessManager 去下载慕课网站的数据 https://coding.imooc.com,也就是这个网站里面的卡片信息。然后做一定的分析和展示。(仅供参考,非法爬虫违法,学习使用下载的数据即可) 功能: 1.下载网页,对网

    2024年02月13日
    浏览(41)
  • Qt —— 编译Qt5版本QFTP库,并实现连接服务、获取列表、上传、下载、删除文件等操作(附源码、附基于Qt5编译好的QFTP库)

    示例效果1   示例效果2   介绍      QFTP是Qt4的库,Qt5改用了QNetworkAccessManager来代替。但是Qt5提供的QNetworkAccessManager仅支持FTP的上传和下载,所以只能 将QFTP库编译为Qt5的库来进行调用。      QFTP在Github的下载地址:https://github.com/qt/qtftp   客户端源码生成的rele

    2024年01月20日
    浏览(43)
  • Qt开发教程:C++与QML的交互

    Qt是一个功能强大的跨平台应用程序开发框架,支持同时使用C++和QML来开发应用程序。通过C++与QML的交互,我们可以实现更灵活、更强大的应用程序。本文将详细介绍如何在Qt中创建自定义对象、在QML端发送信号并绑定到C++端、在C++端发送信号并绑定到QML端、以及实现QML端直接

    2024年04月16日
    浏览(59)
  • qt中使用QGIS实现二次开发导入shp格式地图(MSVC2019_64bit+qt5.15+qgis)

    在qt开发过程中可能要导入自定义格式的图层地图,那么可以把这些数据导入qgis然后导出为shp格式文件,然后下载qgis源码,在qt项目中配置环境变量导入qgis有关的头文件,然后再引入shp数据格式的地图。 QGIS安装 QGIS安装 QGIS导入数据 然后保存点击Layer-save as导出为shp格式文件

    2024年02月05日
    浏览(53)
  • 基于Qt4开发曲线绘制交互软件Plotter

    目前市面上有很多曲线绘制软件,但其交互功能较差。比如,想要实现数据的交互,同步联动等,都需要大量繁琐的人工操作。所以讲想开发一款轻量级的曲线绘制交互软件。下面就以此为案例,记录一下基于Qt4的开发过程。 目录 1 需求 2 技术路线 3 开发流程 1 框架搭建 2

    2024年01月21日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包