Qt下的图像操作——QImage

文章介绍了Qt框架下的QImage类在处理图像时的基本操作,包括打开图片文件、转换图片深度(如转换为16位灰度图)、将图片像素信息写入CSV文件以及如何进行一维数据到QImage的转换和图像剪切。这些内容展示了QImage在非专业图像处理场景下的实用功能。
摘要由CSDN通过智能技术生成

Qt下的图像操作——QImage

Qt为开发者提供了一套图像基础操作的接口——QImage,它无法和OpenCV这种专业图像处理库相比,但仍然为图像操作的基础开发提供了强大的支持。

打开图片文件

QImage image("<path/to/image/file>");

转换图片深度

QImage默认按8位深度读取图片,如果想正常读取更高位深度的图片,必须首先转换图片为目标深度图片,以16位深度灰度图为例

// QImage::Format_Grayscale16这个枚举变量在Qt 5.13及之后才支持
image.convertTo(QImage::Format_Grayscale16);

将图片像素信息写为CSV文件

QFile file("qtval.csv");
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
	qDebug() << ("打开文件失败");
}
QTextStream txtOutput(&file);
for (int j = 0; j < image.height(); ++j) {
	quint16 *dst = reinterpret_cast<quint16*>(image.bits() + j * image.bytesPerLine());
	for (int i = 0; i < image.width(); ++i) {
		txtOutput << QString("%1").arg(dst[i]) << ",";
	}
	txtOutput << endl;
}
file.close();

一维数据转为QImage

QImage byte2img(void* data, int width, int height){
    return QImage(static_cast<const uchar*>(data), width, height,static_cast<int>(sizeof(unsigned short) * static_cast<unsigned int>(width)), QImage::Format_Grayscale16);
}

QImage剪切

QVector<unsigned short> Utility::parseThermalExtraData(const QImage& image,unsigned int x1,unsigned int x2,
                                    unsigned int y1,unsigned int y2){
    QVector<unsigned short> extraData;
    for(unsigned int y = y1;y<=y2;y++){
        quint16 *dst = reinterpret_cast<quint16*>(const_cast<uchar*>(image.bits() + y * static_cast<unsigned int>(image.bytesPerLine())));
        for(unsigned int x = x1;x<=x2;x++){
            extraData.append(dst[x]);
        }
    }
    return extraData;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值