《手写数字识别器》(六)图像处理

这一节,我们主要给大家讲解图像相关的基础知识,以及操作方法。

1. 图像知识

图像可以被视为一系列像素的集合,每个像素分别对应 0 到 255 之间的整数,0 表示黑色,255 表示白色。图像可以根据其颜色模式分为灰度图像彩色图像二进制图

灰度图像(又称为黑白图像)只有一个分量表示像素的颜色,即灰度级别。每个像素的灰度级别介于 0 到 255 之间。灰度图像没有颜色,仅用灰度来表示图像的内容和质感。

彩色图像有三个或更多个分量表示像素的颜色,最常见的格式是 RGB 图像,其中 R、G、B 分别代表红色、绿色和蓝色。

二进制图像中像素值只有两个选项:0和1,没有中间值。通常,0表示黑色,1表示白色。这种类型的图像主要用于描述文字或图形,其优点是占用空间较少,但缺点是当用于描述人物或风景图像时,只能描述轮廓。

2. 图像操作

在后续进行算法模型训练之间,我们会去查看、或者预处理图像的数据。这里介绍下两个相关的基本的操作:

  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()
未经允许不得转载:一亩三分地 » 《手写数字识别器》(六)图像处理
评论 (0)

5 + 2 =