8位, 16位,24位,32位图片显示原理及对比、读自己的mask、判断是否为灰度图

本文深入探讨了图片位深度的概念,从8位到32位的图片显示原理,揭示不同位深度下图片所能展示的颜色数量。24位及以上的位深度被称为真彩色,能展现丰富细腻的色彩。32位图片增加了透明度通道。此外,文章介绍了8位深的mask图和灰度图的特性,并讨论了如何进行通道数之间的转化。VOC2012数据集中包含了多种位深度和通道数的图像类型,如二值化和灰度图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、8位, 16位,24位,32位图片显示原理及对比

我们都知道一张图片可以保存为很多种不同的格式,比如bmp/png/jpeg/gif等等。这个是从文件格式的角度看,我们抛开文件格式,看图片本身,我们可以分为8位, 16位, 24位, 32位等。
单击右键,属性->详细信息即可查看 图 片 位 深 度 \color{red}{图片位深度}
在这里插入图
8位: 2^8 = 2^2(B) 2^3(G) 2^3® = 256 (256色) 可以总共显示256种颜色

16位: 2^16 = 2^5(B) 2^6(G) 2^5® = 65536 可以总共显示65536种颜色

24位: 2^24 = 2^8(B) 2^8(G) 2^8® = 16777216 可以总共显示16777216种颜色

32位: Alpha透明度 + 24位

当8/16位深度时,单个原始颜色 (R/G/B)最大只能表示为(02^3)/(02^6), 无法满足(0~0xff)的范围,所以显示的颜色范围有限。

当24位深度时,使用24bit显示一个像素点, 由8bit Red 8bit Green 8bit Blue组合颜色而成,每一个原始颜色(R/G/B)都可以完全显示(0~0xff),所以24位及以上,我们就叫做真彩色

当32位深度时,与24位相同,可以显示所有的颜色,同时多了一个透明度值。

同一张图片,不用位深度的表现如下:

24位 & 16位:
在这里插入图片描述

8位 & 4位:
在这里插入图片描述

1位:(只能显示黑白了)
在这里插入图片描述

二、8位深的mask图

原mask:

在这里插入图片描述

使用PIL读入转array之后:

img_path = 'F:\\2Affair\毕业论文\\2022.1.3组会PPT\\1.code\CaNet-master\数据集\单mask.png'
img = Image.open(img_path)
np.array(img)

在这里插入图片描述

三、判断是否为灰度图

3.1 Ps:图片的通道数、位深度

3.11 单通道

  • 灰度图的位深度为1*8=8
  • 二值化图像的位深度为1*1=1
    单通道图片,每个像素点的数值表示了黑的程度,0表示黑色。

3.12 三通道

三通道是用的最多的一种图片了。三通道图的意思是每个像素点都有3个值表示 。位深度=3*8=24

3.13 四通道

四通道图的意思是每个像素点都有4个值表示 ,所以就是4通道。其中4通道图片表示的是RGBA。RGBA是代表Red(红色)Green(绿色)Blue(蓝色)和Alpha。alpha通道,表示透明度,alpha=0表示全透明,alpha=255表示不透明。采用的颜色是RGB,可以属于任何一种RGB颜色空间。位深度=4*3=32.
PNG是一种使用RGBA的图像格式。

3.14 通道数之间的转化:

# 高通道数向低通道数转化
img_gray=img.convert('L')  # 将四通道或三通道图片转化为灰度图
img_white=img.convert('1') # 将四通道,三通道,灰度图转化为二值化图片
#低通道数向高通道数转化,主要涉及到灰度图向RGB的转化。
img_color=img_gray.convert('RGB')  # 灰度图向三通道图的转化注意这里输出的图片依然是灰色的,但是位深度已经达到24.

二值化图像

二值图像的意思,就是每个图像当中的每个像素点,只能取0或255,其中0为黑,255为白,即非黑即白。我们将我们的彩色图片转化为灰度图并输出。
在这里插入图片描述
我们使用im.convert('1')来将一张图片转化为二值化的图片。通过转化为np数组看到了二值化图片的真正面目。我们保存这张二值化图片img.save('dd.png'),查看它的详细信息。
在这里插入图片描述
我们可以看到,位深度为1,代表每个像素点用1位表示,即非1即0.这就是二值化图像的全部面目了。

灰度图像

在这里插入图片描述
接下来我们查看cat_gray.png的详细信息:
在这里插入图片描述
这印证了理论:灰度图是单通道的,且位深度为8。
参考:实验带你看懂关于灰度图像,二值化图像,彩色图像、图片通道数,位深度的全部内容

3.2 VOC2012中的四种图:

我们所说的灰度图和二值化的图像都是单通道图片。
VOC2012中有如下四种图:
在这里插入图片描述

3.21 Binary_map_aug

在这里插入图片描述
点击查看属性:
在这里插入图片描述

3.22 JPEGImages

在这里插入图片描述
点击查看属性:
在这里插入图片描述

3.23 SegmentationClass(使用cv2.imread()直接读入是3通道的)

在这里插入图片描述
点击查看属性:
在这里插入图片描述

3.24 SegmentationObject

在这里插入图片描述
点击查看属性:
在这里插入图片描述

### 将24深度的MASK图像转换为8深度 为了实现这一目标,可以采用多种方法和技术来减少图像的颜色深度。一种常见的方式是在编程环境中通过特定函数或库完成此操作。 #### 使用Python和PIL库进行转换 利用Python中的`Pillow`库能够轻松地调整图像的色彩模式以及深: ```python from PIL import Image def convert_image_to_8bit(image_path, output_path): img = Image.open(image_path).convert('L') # 转换为灰度图 img.save(output_path) # 示例调用 convert_image_to_8bit("input_mask.png", "output_mask_8bit.png") ``` 上述代码片段展示了如何取输入文件并将其颜色空间从RGB(默认情况下可能是24)转换成单通道灰度格式(即8)。这一步骤实际上已经完成了由较高向较低数转变的过程[^1]。 #### 利用MATLAB内置功能 对于熟悉MATLAB环境的人来说,也可以借助其强大的图像处理能力来进行同样的变换。具体来说,可以通过设置数据类型的属性来改变图像的存储方式: ```matlab % 加载原始图像 img = imread('mask_input.bmp'); % 显示原图信息 imfinfo('mask_input.bmp') % 将图像转换为uint8类型(8-bit) grayImg = im2uint8(rgb2gray(img)); % 存储新图像 imwrite(grayImg,'mask_output_8bit.bmp'); ``` 这段脚本首先加载了一张名为`mask_input.bmp`的图片,在获取有关该文件的一些基本信息之后,执行了两次主要的操作——先是将彩色图像转成了黑白版本;接着再把像素值映射到了0至255之间,从而实现了从多于8到恰好8表达形式的变化[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值