图像处理程序的设计与实现

article/2025/9/21 15:09:03

一、要求:

      1.利用Qt和QPainter实现一个图像处理程序,有菜单栏、工具栏和状态栏

       2.有图像选择对话框,以选择和读取图像

       3.状态栏显示图像的像素,位深,导入图像的路径和鼠标所在点的像素点坐标

      4.可以对图像缩放,旋转,水平和垂直翻转,显示原图和全屏

二、思路和过程:

       首先利用QAction实现菜单栏和工具栏的动作,并将这些动作加入到各自的栏目当中,然后设置四个Label控件放置状态栏中,以显示要求,部分代码如下:

openAction = new QAction(QIcon(tr(":/imgs/openfile.jpg")),tr("&Open..."),this);
connect(openAction, SIGNAL(triggered()), this, SLOT(open()));exitAction = new QAction(QIcon(tr(":/imgs/exit.png")),tr("E&xit"),this);
connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));zoominAction = new QAction(QIcon(tr(":/imgs/zoomin.png")),tr("Zoom In"),this);
connect(zoominAction, SIGNAL(triggered()),this , SLOT(zoomIn()));zoomoutAction = new QAction(QIcon(tr(":/imgs/zoomout.jpg")),tr("Zoom out"), this);
connect(zoomoutAction, SIGNAL(triggered()), this,SLOT(zoomOut()));
......
fileMenu = menuBar()->addMenu("&File");
fileMenu->addAction(openAction);
fileMenu->addAction(exitAction);zoomToolBar = addToolBar("rotate");
zoomToolBar->addAction(r_rotateAction);
zoomToolBar->addAction(l_rotateAction);statusBar()->addWidget(addressLabel);
statusBar()->addWidget(depthLabel);
statusBar()->addWidget(pixLabel);
statusBar()->addWidget(locationLabel);

        之后,利用QScrollArea()设置背景,然后将一个自定义的CameraImage类放置于QScrollArea中,用于显示图片和实现相关功能。其中比较重要的几个知识点是QPixmap、Qtransform、QPainter和信道间通信传值的过程。

 QPixmap

       在这里,利用了Qpixmap 的load()方法加载图片,transform()方法实现图片的变换,而size()方法用于获取当前图像的大小

Qtransform

       Qtransform的主要功能是控制二维坐标的变换,是一个3*3的矩阵,包括实现位移、缩放、扭曲和旋转,在这里我们使用rotate()来实现旋转功能,而translate用于实现平移。为了实现图像的镜像变换,我们利用toImage()方法获取image类型的图像,并且利用mirrored()来实现镜像。map()方法则是用于设置逻辑坐标和物理坐标的转换比例。

QPainter

     QPainter是用于画图的控件,其中的QPen用于画图像的边缘部分,这里我们可以用drawLine()来画网格线,利用它的settransform()来获取当前的坐标系。

       知道这些之后,我们就可以设置相应的坐标系以及变换了。将当前的图像放入QPainter中,然后利用transform()进行坐标变换,确定位置坐标,代码如下:

QTransform old = painter.transform();QTransform current;current.scale(xscale,xscale);//设置当前尺寸painter.setTransform(current);//设置坐标系m_trs = painter.worldTransform();//世界变化QPointF logicpos = current.inverted().map(QPoint(edgeDistance,edgeDistance));//确定逻辑原点painter.drawPixmap(logicpos, currentpixmap);//物理坐标DrawGrid(painter, current);//划线painter.setTransform(old);//恢复默认

       通过这,我们就能够建立好坐标系了,再利用一个mousemoveEvent()事件,算出当前鼠标位置的坐标,利用信道——槽,将其传入到状态栏中:

QPointF physicalpos = event->pos()-QPointF(edgeDistance,edgeDistance);//以图片的起点为位置原点pos = m_trs.inverted().map(physicalpos);//物理坐标转化为逻辑坐标pos-=QPoint(0.5, 0.5);//以像素点中心点为原点//  qDebug()<<pos.x()<<pos.y();emit mouseMove(pos);//发送信号

大致的,整个项目就完成了。

三、结果

原图:

 

这一章是放大后并显示点线的图像:

 水平镜像对称:

顺时针旋转90度:


http://chatgpt.dhexx.cn/article/kRQuQ2dg.shtml

相关文章

C#图形化程序设计知识总结

图形化程序设计 用可视化的界面进行程序设计 逃出控制台丑丑的黑框 知识导图 图为图形化程序设计的内容清单 Windows窗体程序设计 窗体设计 窗体是一个窗口或对话框&#xff0c;是存放各种控件的容器&#xff0c;可用来向用户显示信息 一个Windows应用程序可以包含多个窗体 …

python 图像分割_5行Python代码实现图像分割的步骤详解

众所周知图像是由若干有意义的像素组成的&#xff0c;图像分割作为计算机视觉的基础&#xff0c;对具有现有目标和较精确边界的图像进行分割&#xff0c;实现在图像像素级别上的分类任务。 图像分割可分为语义分割和实例分割两类&#xff0c;区别如下&#xff1a; 语义分割&am…

台式计算机驱动程序未被安装,计算机图形驱动程序安装失败的原因及其解决方法...

由于许多问题&#xff0c;兼容性和数字签名&#xff0c;计算机图形驱动程序可能会失败. 很有可能没有启用Windows安装程序服务. 每个问题都有不同的解决方案. 如何确定问题的原因&#xff0c;可以借用软件进行检测&#xff0c;也可以尝试一种然后修复. 如果由于Windows Install…

LabVIEW程序框图保存为图像

LabVIEW程序框图保存为图像 想将LabVIEW程序框图保存为标准图像文件&#xff0c;以便可以在LabVIEW之外查看或在文档中使用。如何将程序框图生成为图像&#xff1f; 可以通过打印VI或以编程方式获取LabVIEW程序框图图像。 要打印VI&#xff0c;请使用以下步骤&#xff1a; …

Python图形绘制程序设计

第1关:绘制多边形 任务描述 本关任务:依照案例教程例6-2,用多边形函数绘制各种多边形图形。 编程要求 根据提示,在右侧编辑器补充代码。 测试说明 平台会对你编写的代码进行测试: 开始你的任务吧,祝你成功! 第2关:绘制五角星图形 任务描述 本关任务:绘制一个黄色…

升级计算机的图形卡和驱动程序,如何升级计算机图形卡,计算机图形卡升级方法图...

[哈哈IT网络中关村显卡]如何升级计算机显卡&#xff0c;通常我们会对显卡驱动程序做进一步的升级&#xff0c;这有助于提高显卡的性能&#xff0c;达到达到显卡升级的目的. 显卡驱动程序升级使计算机显示效果更好&#xff0c;显示效果也得到了提高. 下面介绍如何升级计算机图形…

计算机图形驱动程序原理,您知道更新计算机图形驱动程序的作用吗?怎么做

购买或使用计算机时&#xff0c;为了获得更好的视觉体验并避免显示的AV质量&#xff0c;我们通常在选择时安装独立的显卡&#xff01;使用计算机时&#xff0c;有时第三方软件会提示您更新计算机图形驱动程序&#xff0c;但有时却没有&#xff01;更新计算机图形驱动程序有什么…

VTK图形图像开发进阶-学习笔记 01 VTK概述

1.1 VTK概述 1.1.1VTK是什么 1.1.2VTK能做什么 1.1.3如何获取VTK源码 略 1.1.4 VTK学习资源 略 1.2 VTK编译安装 略 1.3创建一个简单的VTK程序 步骤一&#xff1a;创建目录A&#xff1a; D:\VTK\example\Chap01 步骤二&#xff1a;在目录A中创建txt文件&#xff1a;CMa…

用Java完成图形图像绘制

我们要来图形图像的处理&#xff0c;目标就是滑动鼠标绘制一根直线&#xff0c;绘制一个矩形&#xff0c;绘制一个圆&#xff0c;并且绘制任意的一个三角形&#xff0c;和任意的一个等腰三角形 我们先创建一个DrawPad类&#xff0c;在这个类里面完成一些操作 步骤1、创建一个…

图形图像学习随笔:计算机图形学的一些基本概念

本文内容摘抄于&#xff1a;《计算机图形学的概念》 一、计算机图形学的范畴 1、图形主要分为两类&#xff0c;一类是基于线条信息表示的&#xff0c;如工程图、等高线地形图、曲面的线框图等&#xff1b;另一类是明暗图&#xff0c;也就是通常所说的真实感图形&#xff1b; …

升级计算机的图形卡和驱动程序,驱动程序向导如何更新图形卡驱动程序?更新图形驱动程序方法说明...

有许多用户使用驱动程序向导&#xff0c;并且一些新用户不清楚更新图形驱动程序的教程. 今天&#xff0c;我将带给您有关更新图形驱动程序的教程. 希望它能对您有所帮助. 我们首先打开计算机上已安装的驱动程序向导软件&#xff0c;然后进入软件&#xff0c;然后单击页面“立即…

大数据学习内容有哪些?大数据学习路线图

很多人想学习大数据,但是都不清楚大数据学习应该怎么下手。大数据开发工程师简单整理了一下大数据学习路线图,希望对于学习大数据的朋友,有一定的帮助。 总的来说,如果是从零基础开始学习,总共分为八个阶段 第一阶段:HTML+css 第二阶段:JAVASE学习 第三阶段:javaweb …

(转载)大数据学习路线大数据学习路线

一、背景介绍 本人目前是一名大数据工程师&#xff0c;项目数据50T&#xff0c;日均数据增长20G左右&#xff0c;个人是从Java后端开发&#xff0c;经过3个月的业余自学成功转型大数据工程师。 二、大数据介绍 大数据本质也是数据&#xff0c;但是又有了新的特征&#xff0c…

2022最全大数据学习路线(建议收藏)

【不要错过文末彩蛋】 申明&#xff1a; 本文旨在为【大数据自学者|大数据专业学生|工资低的程序员&#xff08;Java/Python等&#xff09;】提供一个从入门到入职的的大数据技术学习路径&#xff0c;不适合5年以上大数据工程师的进阶学习。 前言&#xff1a; 一、个人介绍 …

大数据学习的必要性,让你走向时代前沿!

大数据及人工智能可谓是目前最热门的行业,从走在前沿的科技公司,到努力创新的传统行业,几乎都想把握这个新“风口”。一部分学校也走上了大数据的道路。 在这里还是要推荐下我自己建的大数据学习交流群:199427210,群里都是学大数据开发的,如果你正在学习高大上大数据 ,小…

2022年Python+大数据学习路线图,源码笔记,最优学习资源

任何学习过程都需要一个科学合理的学习路线&#xff0c;才能够有条不紊的完成我们的学习目标。Python大数据所需学习的内容纷繁复杂&#xff0c;难度较大&#xff0c;所以今天特别为大家整理了一个全面的Python大数据学习路线图&#xff0c;帮大家理清思路&#xff0c;攻破难关…

大数据学习路线图(2023完整版)适合收藏

大数据开发是一门涉及处理和分析大规模数据的技术领域&#xff0c;随着大数据技术的不断发展和应用&#xff0c;对大数据开发人员的需求也在逐渐增加。就业前景相对较好&#xff0c;尤其在科技行业和数据驱动型企业中。大数据开发的前景还是有很多优势的&#xff0c;就业范围广…

大数据学习完可以做什么

如果要推荐一种人人都能掌握的编程语言&#xff0c;应该没有比Python更合适的了。如果想学习大数据&#xff0c;可以选择从python语言入手~ Python 简单易学&#xff0c;用途广泛&#xff0c;不仅可以在日常办公中提高大家的职场效率&#xff0c;还能被大型互联网企业应用于后…

大数据学什么

经常有初学者在博客和QQ问我&#xff0c;自己想往大数据方向发展&#xff0c;该学哪些技术&#xff0c;学习路线是什么样的&#xff0c;觉得大数据很火&#xff0c;就业很好&#xff0c;薪资很高。如果自己很迷茫&#xff0c;为了这些原因想往大数据方向发展&#xff0c;也可以…