Qt QImage 图像处理(翻转,灰度,亮度)代码实现

本文介绍了使用QImage类在Qt中实现图像的翻转、转灰度和调整亮度的算法及效果。通过优化图片加载和像素操作提高效率,如利用scanLine函数和uchar指针。图像翻转包括水平、垂直和对角线方式,灰度转换则通过使RGB值相等实现。亮度调整通过对像素RGB值增加特定数值来完成。此外,还展示了主窗口代码结构,用于显示处理结果。
摘要由CSDN通过智能技术生成

1.界面效果

该程序利用QImage类对图片像素进行操作,实现图像的翻转,转灰度,增加亮度的效果。模拟图像处理效果背后的算法实现。后续可以陆续增加其他图像处理功能,可进一步扩展。
在这里插入图片描述

  • 项目结构
    主要涉及一个图像处理类-QImageProcess
    在这里插入图片描述
    在这里插入图片描述
    可优化的空间:
  • .可以将图片加载的label封装为一个类,实现PaintEvent函数,利用update直接进行刷新提高效率。
  • 可以尝试将Qimage一行行读取像素为uchar*,再进行像素操作提高效率,节省内存空间以及拷贝的时间。
    在这里插入图片描述
  • scanlin官方解释:
    uchar QImage::scanLine(int i)
    Returns a pointer to the pixel data at the scanline with index i. The first scanline is at index 0.
    The scanline data is as minimum 32-bit aligned. For 64-bit formats it follows the native alignment of 64-bit integers (64-bit for most platforms, but notably 32-bit on i386).
    Warning: If you are accessing 32-bpp image data, cast the returned pointer to QRgb
    (QRgb has a 32-bit size) and use it to read/write the pixel value. You cannot use the uchar* pointer directly, because the pixel format depends on the byte order on the underlying platform. Use qRed(), qGreen(), qBlue(), and qAlpha() to access the pixels.
    See also bytesPerLine(), bits(), Pixel Manipulation, and constScanLine().

2.图像处理的原理

2.1 图像翻转

  • 包括水平镜像和垂直镜像
    在这里插入图片描述
    代码示例

  • 垂直翻转
    在这里插入图片描述
    == 效果==
    在这里插入图片描述

  • 水平翻转
    在这里插入图片描述

  • 效果
    在这里插入图片描述

  • 对角线翻转
    对角线翻转等于前两个翻转的叠加
    在这里插入图片描述

  • 效果
    在这里插入图片描述

2.2 彩色图转变为灰度图

  • 原理:三通道彩色图转单通道灰度图的原理就是让单个像素的R,G,B值都相等。
    代码示例
    在这里插入图片描述
  • 效果
    在这里插入图片描述

2.3 调整图像亮度

  • 原理:就是让图像像素的R,G,B都增加一个数值,增加后的数值在区间0~255范围内。
    代码示例
    在这里插入图片描述
  • 效果
    在这里插入图片描述

3.主窗口代码

  • 初始化主窗口
    在这里插入图片描述
  • 初始化label,加载原始图片
    在这里插入图片描述
  • 连接信号与槽函数

在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex1_Code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值