图像处理-简单的图像操作
在 Python 的 Pillow(即 PIL)库中,使用 Image.open 打开的图片默认维度是 H, W, C(高度、高度、通道数)。
Image.open 打开的图像是 PIL.Image.Image 类型,不是普通的 NumPy 数组。它是一个专门用于处理图像的类,可以进行操作如显示、裁剪、旋转等。
img = Image.open('example.jpg') # H W C
np_img = np.asarray(img).transpose(2, 0, 1) # 转换为 (C, H, W)
np.asarray(img) 会将 PIL.Image.Image 对象转换为 NumPy 数组类型
plt.figure(figsize=(10, 5)) #W H
这里设置的图形窗口,宽度为10,高度为5
import numpy as np
import torch
from PIL import Image
import matplotlib.pyplot as plt
import os
import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置中文字体(SimHei 是黑体)
rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文
rcParams['axes.unicode_minus'] = False # 解决负号显示问题
os.environ["OMP_NUM_THREADS"] = "1"
def rgb_to_gray(img):
gray_img = np.empty((1, img.shape[0], img.shape[1]), np.dtype('float32'))
img = np.transpose(img, (1, 2, 0)) # 将通道移到最后
img = Image.fromarray(np.uint8(img))
img = img.convert('L') # 转换为灰度图
gray_img = np.expand_dims(np.asarray(img), axis=0)
return gray_img
# 读取原图
img = Image.open('example.jpg') #H W C
np_img = np.asarray(img).transpose(2, 0, 1) # 转换为 (C, H, W)
# 转换为灰度图
gray_img = rgb_to_gray(np_img)
# 显示原图和灰度图
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title("原图")
plt.imshow(img)
plt.axis('off')
plt.subplot(1, 2, 2)
plt.title("灰度图")
plt.imshow(gray_img[0], cmap='gray')
plt.axis('off') #关闭坐标轴
plt.tight_layout() #自动调整
plt.show()