首页 技术 正文
技术 2022年11月14日
0 收藏 574 点赞 3,146 浏览 1468 个字

16 bit 的灰度图如何在QT中显示

用Mat构造的 16 bit 灰度图 无法直接显示,需要转换成 8 bit 的灰度图在QT中显示,

使用OpenCV自带的最大最小值归一法,

cv::normalize(inMat, inMat2, 0., 255., cv::NORM_MINMAX, CV_8UC1)

将16 bit的值map到8 bit,但是会有memory access violation 的错误,想了一想,应该还是Mat中存放像素数据的内存空间,前后不一致了,从16 bit(ushort) 变成了 8 bit(uchar),所以内存访问出现错误。

以下函数其实和上面的函数是一样的功能

void normalizeMat(const cv::Mat& source, cv::Mat& dest, quint8 minv, quint8 maxv){    int cols = source.cols;    int rows = source.rows;    for (int k = 0; k < rows; k++)    {
        const ushort* matRowPtr = source.ptr<ushort>(k);        quint8* destMatRowPtr = dest.ptr<quint8>(k);        for (int j = 0; j < cols; j++)        {            quint8 pixData = static_cast<quint8>((*matRowPtr++ - minv) / (maxv -
minv) * 255);            *destMatRowPtr++ = pixData;        }    }}

想要正确显示,先构造RGB888的image, 把16 bit的像素值采用最大最小化方法映射到8 bit,填满三个通道(三个通道值是一样的)。

QPixmap convert8to16uc1(const cv::Mat& source)
{    double minv = 0, maxv = 0;    Point minLoc(0, 0), maxLoc(0, 0);    cv::minMaxLoc(source, &minv, &maxv, &minLoc, &maxLoc);    quint16* pSource = (quint16*)source.data;    int pixelCounts = source.cols * source.rows;    QImage dest(source.cols, source.rows, QImage::Format_RGB888);    quint8* pDest = (quint8*)dest.bits();    for (int i = 0; i < pixelCounts; i++)    {        //quint8 value = (quint8)((*(pSource)) >> 8);        //quint8 value = static_cast<quint8>((*pSource - minv) / (maxv - minv) *
255);        quint8 value = static_cast<quint8>(floor(((*pSource - minv) / (maxv - minv)
* 255)));        *(pDest++) = value;  // B        *(pDest++) = value;  // G        *(pDest++) = value;  // R        pSource++;    }    return QPixmap::fromImage(dest);}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,122
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,594
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,439
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,210
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,846
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,931