一,需求
利用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 进行加载了。
文章来源:https://www.toymoban.com/news/detail-612550.html
文章来源地址https://www.toymoban.com/news/detail-612550.html
到了这里,关于Qt QImage 显示TIFF格式图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!