1. 转化为灰度图,然后保存为 .png 格式
# coding=utf8
import cv2 as cv
# 读入彩色图片
img = cv.imread('data/origin_img.png')
# 使用 OpenCV 库中的 cvtColor 函数转换作为最终灰度
gray_img = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
# 通过 imshow 显示图片
cv.imshow("origin_img", img)
cv.imshow("gray_img", gray_img)
cv.waitKey(0)
# 保存图片为 .png 格式
cv.imwrite('data/gray_img.png', gray_img)
2. 将图片resize为224×224大小,然后保存为 .tif 格式
# coding=utf8
import cv2 as cv
# 读入彩色图片
img = cv.imread('data/origin_img.png')
# 设置宽度和高度
width = 224
height = 224
points = (width, height)
# resize 图片, 默认为插值法
resize_img = cv.resize(img, points)
# 通过 imshow 显示图片
cv.imshow("origin_img", img)
cv.imshow("gray_img", resize_img)
cv.waitKey(0)
# 保存图片为 .tif 格式
cv.imwrite('data/resize_img.tif', resize_img)
3. 实现RGB到HIS色彩空间的转化,通过 matplotlib可视化原始图像,H图像、I图像和S图像
# coding=utf8
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 读入彩色图片
img = cv.imread('data/origin_img.png')
# 保存原始图像的行列数
row = np.shape(img)[0]
col = np.shape(img)[1]
# 对原始图像进行复制
his_img = img.copy()
# 对图像进行通道拆分
B, G, R = cv.split(img)
# 把通道归一化到 [0,1]
[B, G, R] = [i / 255.0 for i in ([B, G, R])]
# 计算 I 通道
I = (R + G + B) / 3.0
# 计算 H 通道
H = np.zeros((row, col))
for i in range(row):
den = np.sqrt((R[i] - G[i]) ** 2 + (R[i] - B[i]) * (G[i] - B[i]))
thetha = np.arccos(0.5 * (R[i] - B[i] + R[i] - G[i]) / den) # 计算夹角
h = np.zeros(col) # 定义临时数组
# den>0且G>=B的元素 h赋值为 thetha
h[B[i] <= G[i]] = thetha[B[i] <= G[i]]
# den>0且G<=B的元素 h赋值为 thetha
h[G[i] < B[i]] = 2 * np.pi - thetha[G[i] < B[i]]
# den<0的元素 h赋值为0
h[den == 0] = 0
H[i] = h / (2 * np.pi) # 弧度化后赋值给 H通道
# 计算 S 通道
S = np.zeros((row, col))
for i in range(row):
min = []
# 找出每组RGB值的最小值
for j in range(col):
arr = [B[i][j], G[i][j], R[i][j]]
min.append(np.min(arr))
min = np.array(min)
# 计算S通道
S[i] = 1 - min * 3 / (R[i] + B[i] + G[i])
# I为0的值直接赋值0
S[i][R[i] + B[i] + G[i] == 0] = 0
# matplotlib 显示图片
plt.figure(figsize=(10, 5)) # 设置窗口大小
plt.subplot(2, 2, 1), plt.title('origin_img')
plt.imshow(img), plt.axis('off')
plt.subplot(2, 2, 2), plt.title('H_img')
plt.imshow(H, cmap='gray'), plt.axis('off')
plt.subplot(2, 2, 3), plt.title('I_img')
plt.imshow(I, cmap='gray'), plt.axis('off')
plt.subplot(2, 2, 4), plt.title('S_img')
plt.imshow(S, cmap='gray'), plt.axis('off')
plt.show()