【QT】 QImage类的图像转为灰度图

1. 功能描述

QImage读入彩色图像转换为灰度图,并用QPixmap显示。

2. 代码

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QImage *image=new QImage("/home/××/Pictures/××××.png");
    QImage *gray_image = new QImage;
    *gray_image = image->convertToFormat(QImage::Format_Grayscale8,Qt::AutoColor);
    QPixmap *pixmap=new QPixmap();
    pixmap->convertFromImage(*gray_image);
    QLabel *label=new QLabel(this);
    label->setGeometry(100,0,1000,700);
    label->setPixmap(*pixmap);
}

关键函数:

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

QT Document 链接:https://doc.qt.io/qt-5/qimage.html#convertToFormat

3. 效果

原图:
在这里插入图片描述
处理过的图:
在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.该程序用QT开发,实现图片导入、显示、缩放、拖动及处理(冷暖色、灰度、亮度、饱和、模糊、锐化)。 经实测,我写的这个软件在导入10000*7096像素的超大图片的时候,缩放的速度比2345看图软件还快,2345缩放超大图会卡顿,但本软件不会^_^ 关于程序中缩放拖动部分的说面参见我的博客https://blog.csdn.net/weixin_43935474/article/details/89327314; 2.载入图片后,鼠标移动的时候可以显示鼠所在点的图像的坐标以及灰度; 3.缩放的时候,图片右上角可以显示当前图片的缩放比例; 4.用户可导入16位深的tiff灰度图文件(一般来说是由相机拍摄的灰度图数据),导入16位深的tiff的时候,用户需要先点击界面左上角的checkbox,然后再导入tiff图片,否则图片解析不出来。 注:Qt自带的QImage只能导入8位深的tiff灰度图,如果用qt的QImage导入16位深的灰度图图像数据会被强制转换成argb格式的图像,数据就被更改了,所以我自己编写一个解析tiff文件的功能,我翻阅了很多博客,其中如下链接给我的帮助最大: https://blog.csdn.net/chenlu5201314/article/details/56276903 上述博客作为详细解析tiff文件结构的说明文档,写的非常详细,我也是根据上面的内容,自己编写了一个解析tiff文件的(当然功能很少,只能解析符合特定条件的tiff文件) //************************************************************ //by Bruce Xu //注:解析tiff的只解析特定的tiff文件! //1.解析的tiff文件中只存在一幅图,如果文件中存在多幅图,本不支持解析! //2.图像数据为8位或16位深度的灰度图,如果是其他型的图片,本不支持解析! //3.图片没有被压缩过! //************************************************************
### 回答1: Qt的QImage可以用来读取单通道灰度图像。 在使用QImage读取单通道灰度图时,需要注意以下几点: 1. 首先,需要包含Qt的头文件QImage和QColor。 #include <QImage> #include <QColor> 2. 定义一个QImage对象,并指定图像路径。 QImage image("path/to/gray_image.png"); 3. 接着,可以使用QImage的width()和height()函数获取图像的宽度和高度。 int width = image.width(); int height = image.height(); 4. 使用QImage的pixelColor()函数按照坐标位置获取像素值。由于灰度图只有一个通道,所以可以直接通过QColor的red()、green()或blue()函数获取灰度值。 for(int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { QColor pixelColor = image.pixelColor(x, y); int grayValue = pixelColor.red(); // 获取灰度值 // 进行灰度图像的处理 } } 5. 对于单通道灰度图像,可以直接将灰度值作为RGB三个通道的数值,以创建新的QColor对象。 for(int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { QColor pixelColor = image.pixelColor(x, y); int grayValue = pixelColor.red(); // 获取灰度值 QColor newPixelColor(grayValue, grayValue, grayValue); // 创建新的QColor对象 // 进行灰度图像的处理 } } 如此,就可以使用Qt的QImage来读取单通道灰度图,通过获取像素颜色并处理灰度值,实现进一步的图像处理操作。 ### 回答2: Qt中的QImage可以用来读取和处理图像。对于单通道灰度图像,可以使用QImage::Format_Indexed8来表示。下面是一个使用Qt读取单通道灰度图像的示例: ```cpp QImage image("path/to/image.png"); // 指定图像路径 if (image.isNull()) { // 图像加载失败 } else { if (image.format() == QImage::Format_Indexed8) { // 图像是单通道灰度图 // 可以在这里进行图像处理或分析 // 获取图像的宽度和高度 int width = image.width(); int height = image.height(); // 遍历图像的像素 for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { // 获取像素的灰度值 QRgb pixel = image.pixel(x, y); int gray = qGray(pixel); // 在这里可以对灰度值进行处理 // ... // 将处理后的灰度值设置回图像 image.setPixel(x, y, qRgb(gray, gray, gray)); } } // 保存处理后的图像 image.save("path/to/processed_image.png"); } else { // 图像不是单通道灰度图 } } ``` 上面的示例代码使用QImage读取图像,并检查图像是否为单通道灰度图。如果是灰度图,可以对像素进行处理或分析,然后保存处理后的图像。如果图像不是灰度图,则可以根据需要进行其他操作。请注意,这只是一个示例,并且可以根据实际需求进行修改和扩展。 ### 回答3: 在Qt中,可以使用QImage来读取和处理图像。对于单通道灰度图像,可以使用QImage::Format_Grayscale8格式来加载图像。 首先,需要包含头文件<QImage>和<QDebug>: ```cpp #include <QImage> #include <QDebug> ``` 然后,可以使用QImage的load()函数加载图像文件: ```cpp QImage img; if (img.load("path/to/image.png")) { qDebug() << "图像加载成功"; } else { qDebug() << "图像加载失败"; } ``` 加载成功后,可以通过QImage的width()和height()函数获取图像的宽度和高度: ```cpp int width = img.width(); int height = img.height(); qDebug() << "图像宽度:" << width; qDebug() << "图像高度:" << height; ``` 接下来,可以使用QImage的pixel()函数来访问图像的像素值。对于单通道灰度图像,每个像素只有一个值,可以使用qRed()函数来提取该值: ```cpp for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { int grayValue = qRed(img.pixel(x, y)); qDebug() << "像素位置(" << x << ", " << y << ")的灰度值:" << grayValue; } } ``` 最后,记得使用QImage的save()函数保存修改后的图像: ```cpp if (img.save("path/to/modified_image.png")) { qDebug() << "图像保存成功"; } else { qDebug() << "图像保存失败"; } ``` 总结:使用QImage的load()函数加载单通道灰度图像,在循环中使用qRed()函数提取像素的灰度值,并使用save()函数保存修改后的图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值