这一节,我们主要给大家讲解图像相关的基础知识,以及操作方法。
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()



冀公网安备13050302001966号