这一节,我们主要给大家讲解图像相关的基础知识,以及操作方法。
1. 图像知识
图像可以被视为一系列像素的集合,每个像素分别对应 0 到 255 之间的整数,0 表示黑色,255 表示白色。图像可以根据其颜色模式分为灰度图像和彩色图像、二进制图。
灰度图像(又称为黑白图像)只有一个分量表示像素的颜色,即灰度级别。每个像素的灰度级别介于 0 到 255 之间。灰度图像没有颜色,仅用灰度来表示图像的内容和质感。
彩色图像有三个或更多个分量表示像素的颜色,最常见的格式是 RGB 图像,其中 R、G、B 分别代表红色、绿色和蓝色。
二进制图像中像素值只有两个选项:0和1,没有中间值。通常,0表示黑色,1表示白色。这种类型的图像主要用于描述文字或图形,其优点是占用空间较少,但缺点是当用于描述人物或风景图像时,只能描述轮廓。
2. 图像操作
在后续进行算法模型训练之间,我们会去查看、或者预处理图像的数据。这里介绍下两个相关的基本的操作:
- 图像读取:两种常见的图像读取方法
- 图像转换:彩色图像转换为灰度图、二进制图
2.1 图像读取
import matplotlib.pyplot as plt import cv2 import warnings warnings.filterwarnings('ignore') # 1. matplotlib def test(): image = plt.imread('test.jpeg') # (100, 100, 3) => (高, 宽, 通道数) # 通道顺序: RGB # 像素值范围 [0, 255] print(image.shape) # 显示图像 plt.imshow(image, vmin=0, vmax=255) plt.axis('off') plt.title('show image') plt.show() # 2. opencv def test02(): image = cv2.imread('test.jpeg') # (100, 100, 3) => (高, 宽, 通道数) # 通道顺序: BGR # 像素值范围 [0, 255] print(image) # 修改图像通道顺序 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 显示图像 plt.imshow(image, vmin=0, vmax=255) plt.axis('off') plt.title('show image') plt.show() if __name__ == '__main__': test02()
2.2 图像转换
import matplotlib.pyplot as plt import cv2 import numpy as np import warnings warnings.filterwarnings('ignore') def show_image(image, vmin=0, vmax=255): plt.imshow(image, vmin=vmin, vmax=vmax) plt.show() # 1. 灰度图 def test01(): # 1. opencv 转换为绘图度 image1 = cv2.imread('test.jpeg') image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY) show_image(image1) # 2. 二进制图 def test02(): image1 = cv2.imread('test.jpeg') image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY) # 超过阈值的像素将被赋予最大值,低于阈值的像素将被赋予0 # 参数: # 第一个参数是输入图像 # 第二个参数是阈值(在此我们选择125作为阈值,但这个值可以根据你的需求进行调整) # 第三个参数是最大值(在此我们选择255) # 第四个参数是阈值化类型 # 返回值: # 第一个值是阈值,它是用于分类像素值的阈值 # 第二个值是所得到的二值图像,即阈值化后的图像 # 注意: 使用之前需要将彩色图像转换为灰度图 # threshold, image1 = cv2.threshold(image1, 125, 255, cv2.THRESH_BINARY) # 更简单、灵活的方法 image1 = np.where(image1 > 125, 255, 0) # 显示图像 show_image(image1) if __name__ == '__main__': test02()