【CV作业01】转灰度图、resize、HIS转化

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()

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值