利用QImage 显示TIFF格式图片

利用QImage 显示TIFF格式图片

一,需求

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

二,关键点

  • 96位 深度需要利用 IMREAD_UNCHANGED 模式进行加载
Mat image2Draw_mat = imread("depth.tiff",cv::ImreadModes::IMREAD_UNCHANGED);
  • 加载后进行 规一化,然后进行位深 转换,将32f 转成8u
Mat normalize_mat;
normalize(image2Draw_mat, normalize_mat, 0, 500, NORM_MINMAX);
normalize_mat.convertTo(normalize_mat, CV_8U);
  • 因为 opencv 是 bgr格式,所以需要将bgr转成 rgb
cv::cvtColor(normalize_mat, normalize_mat, COLOR_BGR2RGB);
  • 因为原图是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);
  • 最后建议使用 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 进行加载了。

发表回复