16 bit 的灰度图如何显示
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);
}
16 bit 的灰度图如何显示的更多相关文章
- 8位灰度图在LCD上显示
一.概述 1.灰度 灰度使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像.每个灰度对象都具有从 0%(白色)到灰度条100%(黑色)的亮度值. 使用黑白或灰度扫描仪生成的图像通常以灰 ...
- 从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中
//从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中 //作者:sandy //时间:2015-10-10 #inclu ...
- Matlab 如何/怎样 读取图片 显示图片 转换成灰度图
% 读取图片 im = imread('路径') >> im = imread('ny.png'); % 显示图片 imshow(im) >> imshow(im) % 转换成 ...
- python显示灰度图
import matplotlib import matplotlib.pyplot as plt %matplotlib inline im=plt.imread('../lena.jpg', py ...
- Qt生成灰度图(转载)
Qt生成灰度图(转载) 项目中用到大量基础图像处理知识,其中灰度图的生成是很重要的一环. 先补充一些基础知识: ------------------------------------------ ...
- Android 将ARGB图片转换为灰度图
思路如下: 1.读取or照相,得到一张ARGB图片. 2.转化为bitmap类,并对其数据做如下操作: A通道保持不变,然后逐像素计算:X = 0.3×R+0.59×G+0.11×B,并使这个像素的值 ...
- 【Qt开发】QImage设置为8-bit灰度图
项目中用到大量基础图像处理知识,其中灰度图的生成是很重要的一环. 先补充一些基础知识: -------------------------------------------------------- ...
- Android-将RGB彩色图转换为灰度图
package com.example.yanlei.wifi; import android.graphics.Bitmap; import android.graphics.BitmapFacto ...
- c语言实现灰度图转换为二值图
将上篇得到的灰度图转换为二值图,读取像素数据,低于某一值置0,否则设置为255,为得到更好的效果不同图片应采用不同的值 /* 2015年6月2日11:16:22 灰度图转换为二值图 blog:http ...
随机推荐
- VM安装kali操作系统
工具:VMware Workstation 15 Pro(15.5.6 build-16341506),kali-linux-2020.2-installer-amd64.iso vm15下载链接:h ...
- python -- 负数平方根-虚数的使用
负数的平方根是虚数. 不能使用sqrt,因为它只能处理浮点数,而虚数是完全不同的--这也是由另外一个叫做cmath(即 complex math, 复数)的模块来实现这些功能的原因. >> ...
- Netty 源码分析系列(二)Netty 架构设计
前言 上一篇文章,我们对 Netty做了一个基本的概述,知道什么是Netty以及Netty的简单应用. Netty 源码分析系列(一)Netty 概述 本篇文章我们就来说说Netty的架构设计,解密高 ...
- [JS]函数作为值
在JavaScript中,函数不仅是语法,也是值.这意味着可以把函数赋值给变量.保存为对象的属性或者数组的元素.作为参数传给其他函数. 将函数赋值给变量s,实际上变量引用的是函数对象.不仅可以通过函数 ...
- DNS服务器(一)正向解析
一.DNS简介 在日常生活中人们习惯便用域名访问服务器,但机器间互相只认IP地址,域名与1P地址之间是多对一的关系,一个ip地址不一定只对应一个域名,且一个域名只可以对应一个ip地址,它们之间的转换工 ...
- Windows 系统安装 git基础小白的简单操作包含基本输入命令
首先 去官网下载git应用 https://git-scm.com/downloads 点击前往 安装的操作也比较简单,一直点击下一步 安装完成之后 在空白桌面点击是否有 Git Gui ...
- ms17-010
永恒之蓝和ms17-010简介: 永恒之蓝(EternalBLUE)"是Shadow Brokers(影子经纪人)黑客组织公布的一款黑客工具,该工具利用的漏洞也被称为MS17-010漏洞,M ...
- 指向结构的指针 struct结构名称 *结构指针变量名
//指向结构的指针 struct结构名称 *结构指针变量名 //(*结构指针变量名).成员变量名//结构指针变量->成员变量名 1 #include<stdio.h> 2 #incl ...
- Git点赞82K!字节跳动保姆级Android学习指南,干货满满
这是一份全面详细的<Android学习指南>,如果你是新手,那么下面的内容可以帮助你找到学习的线路:如果你是老手,这篇文章列出的内容也可以帮助你查漏补缺.如果各位有什么其他的建议,欢迎留言 ...
- 解决SecureCRT中删除会话后无法重建问题
SecureCRT和SecureFX中创建一个会话(例如名为"10.0.2.47")后,如果删除这个会话,然后再创建一个同样名字的会话,就会报错,原因是SecureCRT在C盘上创 ...