1.2 图像类型与图像数据
1.2.1RGB真彩色图像(RGB image,true color image)
RGB图像,也称为真彩色图像,是由三个相同维度的二维数组组成,每个数组分别代表图像颜色中的红色(R)、绿色(G)、蓝色(B)分量。
每个像素的颜色由这三个分量的组合决定,而每个分量通常占用8位,因此每个像素总共由24位表示,能够展示2的24次方种颜色。
Python语言中,常用一个M×N×3的NumPy三维数组来保存RGB真彩色图像。
第一维(M):代表图像的高度,即图像的行数。它决定了图像在垂直方向上的像素数量。
第二维(N):代表图像的宽度,即图像的列数。它决定了图像在水平方向上的像素数量。
第三维(3):代表每个像素的颜色通道数。在RGB颜色模型中,每个像素的颜色由红色(R)、绿色(G)、蓝色(B)三个分量组成。因此,这个维度的大小是3,分别对应R、G、B三个颜色通道。
import numpy as np
# 创建一个M×N×3的NumPy三维数组来表示RGB图像
# 这里M=100, N=100,表示图像的高度和宽度都是100像素
# 3表示RGB三个颜色通道
image = np.zeros((100, 100, 3), dtype=np.uint8)
# 设置图像的背景色为灰色,即RGB三个通道的值都相等
image[:, :, :] = [128, 128, 128]
# 修改图像中(50, 50)位置像素的颜色为红色
# 注意NumPy数组的索引是从0开始的
image[50, 50, :] = [255, 0, 0]
# 打印修改后的像素值,确认颜色是否已经改变
print(image[50, 50, :])
对[M,N,(0、1、2)]的解释
对RGB通道,[M,N,0]表示图像R分量的值,[M,N,1]表示G分量的值,[M,N,2]表示图像B分量的值
[M,N,:]则表示获取图像的RGB值。
对RGB通道,[M,N,0]表示图像B分量的值,其余同理。
1.2.2索引图像(indexd color image,palette image)
索引图像是一种特殊的图像表示方式,它将像素值直接作为颜色索引表的下标,通过查找颜色索引表来获取实际的颜色值。
索引图像数据可以通过两个二维数组来表示:
一个是M×N的二维数组,用于存储每个像素的颜色索引值;
另一个P×3的二维数组,作为颜色映射表,用于存储每个像素颜色索引值所对应的RGB颜色分量。
索引图像通过仅存储每个像素的颜色索引值而不是完整的RGB颜色信息,显著减少了图像文件的大小。这使得索引图像非常适合于网络传输、存储空间有限的环境或对加载速度有严格要求的场合。
from PIL import Image
import numpy as np
# 读取索引图像
im = Image.open('图片地址')
# 确认图像是否为索引图像
if im.mode == 'P':
print('图像是索引图像')
else:
print('图像不是索引图像')
# 如果不是索引图像,可以选择转换为索引图像,但这里为了简化,我们假设它已经是索引图像
# 将索引图像转换为NumPy数组,获取颜色索引值
imgX = np.array(im)
print('颜色索引值数组的大小:', imgX.shape) # 输出索引数组的形状,通常是高度x宽度
# 获取索引图像的调色板
impal = im.getpalette()
if impal:
# 确定调色板的颜色数量,并将其转换为二维数组颜色表
num_colours = int(len(impal) / 3)
cmaparray = np.array(impal).reshape(num_colours, 3)
print('图像调色板数组的大小:', cmaparray.shape) # 输出调色板数组的形状,通常是颜色数x3(RGB)
print('图像调色板数组的元素:\n', cmaparray) # 输出调色板数组的具体颜色值
else:
print('图像没有调色板,可能是因为它不是索引图像或者调色板已被移除。')
# 示例:使用调色板将索引值转换为RGB颜色(这里不直接显示,但展示逻辑)
# 假设我们要获取某个像素(x, y)的颜色
x, y = 10, 20 # 示例像素坐标
index = imgX[y, x] # 获取该像素的颜色索引值
rgb_color = cmaparray[index] # 使用索引值从调色板中获取RGB颜色
print('像素(x, y)的RGB颜色:', rgb_color)
①cmaparray = np.array(impal).reshape(num_colours, 3)
对应颜色索引表即,P×3的二维数组,P代表颜色数量。
②x, y = 10, 20 # 示例像素坐标
x代表列,y代表行,即(y,x)
index = imgX[y, x] # 获取该像素的颜色索引值
rgb_color = cmaparray[index] # 使用索引值从调色板中获取RGB颜色print('像素(x, y)的RGB颜色:', rgb_color)
1.2.3灰度图像(grayscale image)
灰度图像,也称为单色图像,仅使用单一的颜色通道来表示图像的亮度信息,在灰度图像中,每个像素的灰度值通常在0到255之间变化,其中0表示黑色,255表示白色,中间的灰度值表示不同程度的灰色,灰度图像可以看作是RGB图像的一个特例,其中R、G、B三个分量的值相等.
此处补充一条opencv直接以灰度图方式读入彩色图像的代码
#以灰度图像方式读入一幅彩色图像
img_gray = cv.imread('图像路径', cv.IMREAD_GRAYSCALE)
1.2.4二值图像(binary image)
二值图像是最简单的图像类型,其每个像素只能取两个值之一(通常是0和1),分别代表黑色和白色,二值图像可以看作是灰度图像的一个极端情况,其中所有像素的灰度值都被阈值化处理为0或255,由于二值图像只有两个灰度级别,因此它的存储空间非常小,处理速度也很快。
应用:二值图像广泛应用于文字识别、边缘检测、图像分割等领域。
注,本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。
标签:颜色,像素,索引,RGB,数组,图像,数据处理 From: https://blog.csdn.net/2301_80400361/article/details/141023552