Qt QImage 显示TIFF格式图片

一,需求

利用Qt 控件 显示 tiff 图片,由于tiff图像深度位96位,3通道,所以无法直接用QImage 显示,QImage 支持24位,因此需要利用Opencv 进行转换。

二,关键点

(1),96位 深度需要利用 IMREAD_UNCHANGED 模式进行加载

 Mat image2Draw_mat = imread("depth.tiff",cv::ImreadModes::IMREAD_UNCHANGED);

(2),加载后进行 规一化,然后进行位深 转换,将32f 转成8u

Mat normalize_mat;
normalize(image2Draw_mat, normalize_mat, 0, 500, NORM_MINMAX);
normalize_mat.convertTo(normalize_mat, CV_8U);

(3),因为 opencv 是 bgr格式,所以需要将bgr转成 rgb

cv::cvtColor(normalize_mat, normalize_mat, COLOR_BGR2RGB);

(4),因为原图是3通道,所以qt这边使用 QImage::Format_RGB888

const uchar *pSrc = (const uchar*)image2Draw_mat->data;
        image2Draw_qt = QImage(pSrc, image2Draw_mat->cols,
                               image2Draw_mat->rows,image2Draw_mat->step,QImage::Format_RGB888);

(5),最后建议使用 QGraphicsView 显示 QImage 这样可以进行缩放,更利用观看。

三,位深度的理解

以3通道图像为例,位深度 显示96位,意思是 一个像素,可以显示的颜色范围为2的96次方种,每个通道32位,也就是4个字节。  而Qt Image 最多支持24位,也就是每个通道位8位 一个字节。因此需要将mat 进行转换(normalize_mat.convertTo(normalize_mat, CV_8U)) 把32转成8。之后就可以利用Qt QImage::Format_RGB888 进行加载了。

猜你喜欢

转载自blog.csdn.net/weixin_38416696/article/details/128577087