QT图像处理类QImage常见使用方法

这篇具有很好参考价值的文章主要介绍了QT图像处理类QImage常见使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

Qt 是一个跨平台的 C++ 库,提供了丰富的图像处理功能,可以用来实现各种图像处理任务,例如图像缩放、旋转、灰度化、二值化等。本文将介绍使用 Qt 实现图像处理的方法,并提供代码示例。

加载和保存图像

在 Qt 中,可以使用 QImage 类型来加载和保存图像,QImage 支持多种图像格式,例如 BMP、JPEG、PNG 等。下面是一个加载和保存图像的示例代码:


#include <QImage>
// 加载图像
QImage image("test.jpg");
// 保存图像
image.save("output.png");

图像缩放和旋转

在 Qt 中,可以使用 QImage 类型的 scaled 和 rotated 函数来实现图像的缩放和旋转。

#include <QImage>
// 加载图像
QImage image("test.jpg");
// 缩放图像
QImage scaledImage = image.scaled(640, 480);
// 旋转图像
QImage rotatedImage = image.rotated(90);

图像灰度化

图像灰度化是一种常用的图像处理操作,可以将图像从 RGB 彩色空间转换为灰度空间。在 Qt 中,可以使用 QImage 类型的 convertToFormat 函数来实现图像的灰度化。

QImage::convertToFormat()

QImage::convertToFormat() 是 Qt 图像处理中一个非常常用的函数,用于将一个 QImage 对象的像素格式转换为另一种格式。它的函数原型如下:


QImage QImage::convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const;

其中,format 参数表示目标像素格式,可以是 QImage::Format_ARGB32、QImage::Format_RGB888、QImage::Format_Grayscale8 等格式,具体支持的格式可以查看 Qt 文档。
flags 参数是可选的,表示转换时的一些选项,可以是以下值之一:

Qt::AutoColor:自动选择目标格式的颜色空间。
Qt::ColorOnly:仅转换颜色格式,不转换 alpha 通道。
Qt::MonoOnly:仅转换为单色格式。
Qt::OrderedDither:启用有序抖动算法,提高颜色质量。
Qt::DiffuseDither:启用漫反射抖动算法,提高颜色质量。
Qt::ThresholdDither:启用阈值抖动算法,提高颜色质量。

注意:convertToFormat() 函数返回一个新的 QImage 对象,表示转换后的图像。注意,转换后的图像是一个全新的对象,不会改变原来的图像对象。


#include <QImage>
// 加载图像
QImage image("test.jpg");
// 灰度化图像
QImage grayImage = image.convertToFormat(QImage::Format_Grayscale8);

图像二值化

图像二值化是将图像中的像素值转换为 0 或 255 的操作,可以用来实现图像的二值化处理。在 Qt 中,可以使用 QImage 类型的 convertToFormat 函数和 threshold 函数来实现图像的二值化。

threshold 函数

threshold 函数是图像处理中一个常用的函数,可以将图像的像素值按照阈值进行二值化处理,将大于或等于阈值的像素置为一个值,小于阈值的像素置为另一个值。在 Qt 中,QImage 类提供了 threshold() 函数来实现这个功能,其函数原型如下:


void QImage::threshold(int threshold, Qt::ThresholdMode mode = Qt::ThresholdBinary);

其中,threshold 参数表示二值化的阈值,可以是任意整数;mode 参数表示二值化的模式,可以是以下三种模式之一:

Qt::ThresholdBinary:二值化模式,将像素值大于或等于阈值的像素设置为 1,小于阈值的像素设置为 0。
Qt::ThresholdInverted:反色二值化模式,将像素值小于或等于阈值的像素设置为 1,大于阈值的像素设置为 0。
Qt::ThresholdTruncate:截断模式,将像素值大于阈值的像素设置为阈值,小于或等于阈值的像素保持不变。

注意,threshold() 函数直接修改当前 QImage 对象的像素值,而不会返回一个新的图像对象。因此,在使用该函数时,应该先对原始图像进行备份,以便在需要时恢复原始图像。


#include <QImage>
// 加载图像
QImage image("test.jpg");
// 灰度化图像
QImage grayImage = image.convertToFormat(QImage::Format_Grayscale8);
// 二值化图像
QImage binaryImage = grayImage;
binaryImage.threshold(128);

以上是使用 Qt 实现图像处理的基本方法,可以通过这些函数来实现图像的缩放、旋转、灰度化和二值化等处理。需要注意的是,在实际使用中,还需要考虑图像的格式、大小和处理效率等问题。

loadFromData 从内存加载图像

QImage 类还提供了 loadFromData 函数,可以从数据中加载图像。这个函数可以方便地将图像数据从内存中加载到 QImage 类型中进行处理,具体用法如下:

#include <QFile>
#include <QByteArray>

// 读取文件到 QByteArray 中
QFile file("test.jpg");
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();
file.close();

// 从 QByteArray 中加载图像
QImage image;
image.loadFromData(data);

这个示例代码中,首先使用 QFile 类型的 readAll 函数读取文件数据到 QByteArray 类型中,然后使用 QImage 类型的 loadFromData 函数从 QByteArray 中加载图像。这个方法可以方便地将图像数据从内存中加载到 QImage 类型中进行处理,避免了多次读取文件的开销。

拓展

要按比例扩大填充图像并根据标签的长边或短边来进行调整,您可以使用以下代码修改您的现有代码:

// 提取JPEG图像数据
QByteArray jpegData = buffer.mid(startIndex, endIndex + endMarker.size() - startIndex);
QImage image;
if (image.loadFromData(jpegData, "JPEG")) {
    // 获取标签的宽度和高度
    int labelWidth = ui->label->width();
    int labelHeight = ui->label->height();

    // 计算图像的宽度和高度
    int imageWidth = image.width();
    int imageHeight = image.height();

    // 计算宽度和高度的比例
    double widthRatio = static_cast<double>(labelWidth) / imageWidth;
    double heightRatio = static_cast<double>(labelHeight) / imageHeight;

    // 选择较小的比例进行扩大
    double scaleFactor = qMin(widthRatio, heightRatio);

    // 根据比例调整图像的大小
    QImage scaledImage = image.scaled(imageWidth * scaleFactor, imageHeight * scaleFactor, Qt::KeepAspectRatio);

    // 在标签上显示图像
    ui->label->setPixmap(QPixmap::fromImage(scaledImage));
}

这段代码将会根据标签的大小和图像的宽高比,选择较小的比例进行扩大,以确保图像能够填充好标签的长边或者短边。然后,它会将调整后的图像显示在标签上。文章来源地址https://www.toymoban.com/news/detail-436264.html

到了这里,关于QT图像处理类QImage常见使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • OpenCV(图像处理)-基于Oython-滤波器(低通、高通滤波器的使用方法)

    低通滤波 :低通滤波可以去除图像的噪音或平滑图像。 高通滤波 :可以帮助查找图像的边缘。 噪音 :即对一幅图像的产生负面效果,过暗或过亮的部分,一幅图像中,低于或高于某个像素点的值,都可以认为是噪音。 卷积核 :即用来滤波的矩阵,卷积核一般为奇数,如

    2024年02月09日
    浏览(55)
  • Matlab使用BP和LVQ神经网络、图像处理技术三种方法实现人脸识别(附上完整仿真源码+数据)

    人脸识别是一种常见的生物特征识别技术,广泛应用于人脸门禁、人脸支付等领域。在人脸识别中,神经网络和图像处理技术是两种常用的方法。本文将介绍如何使用Matlab实现人脸识别,包括BP神经网络、LVQ神经网络和图像处理技术。 首先,我们将介绍BP神经网络的人脸识别

    2024年02月13日
    浏览(47)
  • 常见图像噪声和常见图像噪声处理算法

    图像噪声按噪声与信号的关系可分为加性噪声和乘性噪声;按照产生原因可分为外部噪声和内部噪声;按照统计特性可分为平稳噪声和非平稳噪声;平稳噪声基于统计后的概率密度函数又可以分为:高斯噪声、泊松噪声、脉冲噪声、瑞利噪声。 1.2基于统计后的概率密度函数

    2024年02月16日
    浏览(43)
  • “Python OpenCV 图像格式转换:RGB与BGR互转“——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是R...

    “Python OpenCV 图像格式转换:RGB与BGR互转”——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是RGB和BGR格式之间的转换。本文将详细介绍如何使用opencv-python库将图像从RGB格式转换为BGR格式以及从BGR格式转换为RGB格式。 要实现图像格

    2024年02月12日
    浏览(82)
  • 上位机图像处理和嵌入式模块部署(qt图像处理)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         很多人一想到图像处理,本能的第一反应就是opencv,这也没有错。但是呢,这里面还是有一个问题的,不知道大家有没有想过,如果我们为了降低成本,需要把图像放到mcu来处理,这

    2024年01月23日
    浏览(46)
  • 数字图像处理之matlab常见函数

    作用:读取图像 作用:彩色图像转化为灰度图像 作用:显示图片对应的直方图 作用:展示图片 作用:传入两个参数,功能为对图片进行均衡化处理 作用:将图片的数据类型转化为双精度浮点数 注意: 补充重点 ,如果我们对图像进行了转double的处理,然后用imshow(具体图片

    2024年02月09日
    浏览(39)
  • 深入了解OpenCVSharp中常见的图像处理功能

    OpenCVSharp是C#语言中用于图像处理和计算机视觉的开源库,它提供了丰富的功能和算法,能够帮助开发者轻松处理图像数据并实现各种视觉任务。本文将介绍OpenCVSharp中常见的图像处理功能,包括图像加载与保存、图像基本操作、图像滤波、边缘检测、图像分割等,并附带相应

    2024年03月23日
    浏览(59)
  • OpenCV+Qt实现图像处理操作工具

    Qt界面实现 雪花屏 高斯模糊 中值滤波 毛玻璃 灰度化 XY方向模糊 双边模糊 腐蚀 [图像处理操作] 要求左边原图,右边效果图 结果展示如下:[图像处理实现有点多,就不一个一个地展示了,各别展示如下] 雪花屏 本文福利, 莬 费领取Qt开发学习资料包、技术视频,内容包括(

    2024年02月06日
    浏览(46)
  • 【QT数字图像处理】(三)QSlider滑块学习

    实验二的要求是编程实现RGB彩色空间到HSV彩色空间的转换,并通过调整H、S、V实现图像色度、色饱和度和亮度的调节。在开始实验二之前,我们先来学习一下关于QSlider滑块的操作。 最后要实现的效果如下:用3个滑动条分别来调节RGB三个颜色分量的大小,并显示到左侧各自的

    2024年02月13日
    浏览(31)
  • QT+OpenCV实现一个标注工具(图像处理、边缘检测)

    作者是一名QT初学者,为检验学习成果及完成毕业设计,在张老师和学姐的指导下,开发了这个标注工具。CSDN上很多文章对我的学习提供了极大的帮助,分享这篇文章给需要的人一起学习进步~ 废话不多说,先看看效果: Windows10、Qt5.13.2(编译器用的是MinGW64_bit)、OpenCV4.1 环

    2024年02月11日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包