一、图像基本概念
图像是由像素点组成的,每个像素点的取值范围为: [0, 255] 。像素值越接近于0,颜色越暗,接近于黑色;像素值越接近于255,颜色越亮,接近于白色。
在深度学习中,我们使用的图像大多是彩色图,彩色图由RGB3个通道组成,如下图所示:
1、二值图像
一幅二值图像的二维矩阵仅由0、1两个值构成,“0”代表黑色,“1”代白色。由于每一像素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。
2、灰度图像
灰度图像矩阵元素的取值范围通常为[0,255]。因此其数据类型一般为8位无符号整数的(int8),这就是人们经常提到的256灰度图像。“0”表示纯黑色,“255”表示纯白色,中间的数字从小到大表示由黑到白的过渡色。二值图像可以看成是灰度图像的一个特例。
3、索引图像
索引图像的文件结构比较复杂,除了存放图像的二维矩阵外,还包括一个称之为颜色索引矩阵MAP的二维数组。MAP的大小由存放图像的矩阵元素值域决定,如矩阵元素值域为[0,255],则MAP矩阵的大小为256Ⅹ3,用MAP=[RGB]表示。MAP中每一行的三个元素分别指定该行对应颜色的红、绿、蓝单色值,MAP中每一行对应图像矩阵像素的一个灰度值,如某一像素的灰度值为64,则该像素就与MAP中的第64行建立了映射关系,该像素在屏幕上的实际颜色由第64行的[RGB]组合决定。也就是说,图像在屏幕上显示时,每一像素的颜色由存放在矩阵中该像素的灰度值作为索引通过检索颜色索引矩阵MAP得到。
4、真彩色RGB图像
RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是,RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。RGB图像的数据类型一般为8位无符号整形。注意:通道的顺序是 BGR 而不是 RGB。
""" 案例: 演示基础的图像操作. 图像分类: 二值图: 1通道, 每个像素点由0, 1组成 灰度图: 1通道, 每个像素点的范围: [0, 255] 索引图: 1通道, 每个像素点的范围: [0, 255], 像素点表示颜色表的索引 RGB真彩图: 3通道, Red, Green, Blue, 红绿蓝. 涉及到的API: imshow() 基于HWC, 展示图像 imread() 读取图像, 获取HWC imsave() 基于HWC, 保存图片. """ # 导包 import numpy as np import matplotlib.pyplot as plt import torch # 1. 定义函数, 绘制: 全黑, 全白图. def dm01(): # 1. 定义全黑图片: 像素点越接近0越黑, 越接近255越白. # HWC: H: 高度, W: 宽度, C: 通道. img1 = np.zeros((200, 200, 3)) # print(f'img1: {img1}') # 2. 绘制图片. plt.imshow(img1) # plt.axis('off') plt.show() # 2. 定义全白图片. img2 = torch.full(size=(200, 200, 3), fill_value=255) # print(f'img2: {img2}') plt.imshow(img2) # plt.axis('off') plt.show() # 2. 定义函数, 加载图片. def dm02(): # 1. 加载图片. img1 = plt.imread('./data/img.jpg') # print(f'img1: {img1}') # print(f'img1.shape: {img1.shape}') # (640, 640, 3), HWC # 2. 保存图像. plt.imsave('./data/img_copy.png', img1) # 3. 展示图像. plt.imshow(img1) plt.show() # 3. 测试 if __name__ == '__main__': dm01() dm02()二、总结
1、图像的构成 由像素点构成,【0-255】,RGB,【HWC】
2、图像的加载方法 Plt.imread() Plt.imshow()