16位图像转换为8位图像(c++,python)

目录

1.问题背景

2.解决方法       

2.1.使用C++进行转换      

2.2.使用Pyhton进行转换        

3.效果查看        


 ⚡插播一条老家自产的糖心苹果,多个品种,欢迎选购!有问题随时私信我⚡:

??来自雪域高原的馈赠——海拔2000米的大凉山高原生态糖心苹果??icon-default.png?t=M666https://blog.csdn.net/qq_15969343/article/details/126107252

1.问题背景

        简单的说,色彩深度是指每个像素可以显示的颜色数,一般是用“位”或“Bit”为单位来描述。位数越多,可用的颜色就越多,图像的色彩表现就越准确,并且图像的文件大小也会随着位深的增加而增大,因为在高位深度的图像中,每一个像素存储了更多的颜色信息。

        在进一步了解色彩深度之前,我们先来讨论一下什么是“位(Bit)”。我们都知道,计算机是以二进制的方式处理和存储信息的,因此任何信息进入计算机后都会变成1和0不同位数的组合,当然色彩也是如此。

        例如,1位的色彩深度,在计算机中只能显示0或1,所以能够展现的色彩信息只有两种白色或黑色。当我们将色彩深度提升到2位时,将出现:00、01、10、11,4(2^2)种组合方式,从而产生了相对简单的黑白灰关系。色彩深度达到3位时,将带来8(2^3)种不同的组合方式:000、001、010、011、100、101、110 和 111,黑白灰的过渡将变得更加细致。由此可见,每一次位数的增加,组合方式都会带来翻倍式的上涨。        

        如之前所说,我们需要将16位图像转换为8位图像;16位图像的像素值一共有:

               2^16=65536种颜色;

        而8位位图像只有:

               2^8=256种颜色,

        传统的位数转换都是:像素值*256/65536,比如photoshop,以及matlab的im2uint8函数都是如此,在一般场景下是没有问题的,我们姑且称之为“真转换”,而如果是labelme得到的label.png标注图像在进行转换时,由于每个类别的像素值从0开始赋值,如0,1,2,3,4.......如果进行“真转换”的话,由于这些值都太小,基本转换后的像素值都是(0,1)之间,所以都变成了0,所以我们需要将16位转换位8位的时候还保留住原来的像素值,这种只改变位数,而不改变具体数值的转换方法,姑且称之为“伪转换”;

        而解决的思路也很简单,图像说白了也就是一个矩阵,像素值也就是一个数值而已,我们只需要把表示类别的像素值找出来,并且把他们的值投射到8位即可:

        使用的软件环境如下:

  • Python 3.6.3
  • VS2013
  • OPENCV 2.4.11
  • PIL
  • Labelme 2.8.0

2.解决方法       

2.1.使用C++进行转换      

        首先,C++使用opencv转化,核心代码如下:(完整代码,批量转换,速度最快,需要配置opencv):利用c++将16位图像转换为8位图像,支持批量https://download.csdn.net/download/qq_15969343/85064222

for (int k = 0; k<src.rows; k++)
		{
			for (int kk = 0; kk<src.cols; kk++)
			{
				int n = src.at<ushort>(k, kk);
				ff.at<uchar>(k, kk) = n;
			}
		}

2.2.使用Pyhton进行转换        

        python使用PIL进行转换,更加简单,核心语句就一行(完整代码,推荐,批量转化,速度也很快,但是少了配置opencv的麻烦):

利用python将16位图像转换为8位图像,支持批量https://download.csdn.net/download/qq_15969343/85064214

img = Image.fromarray(np.uint8(img))

3.效果查看        

        转换完成后,可以使用软件查看时候变为8位,但是打开图片依然是一片黑:

        如果需要提高类别之间的差异性,可以直接乘以一个较大的值:如下:

img = Image.fromarray(np.uint8(img)*20)

        图片就会有明显的区分,如下:

都看到这里了,还不赶紧点赞评论收藏走一波?


版权声明:本文为qq_15969343原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。