开启成长之旅!这是我参与「日新方案 12 月更文应战」的第7天,点击检查活动概况

前言

将图画从一个色彩空间转化为另一个色彩空间是一种非常有用的操作,在多种不同应用程序中都有着重要作用,例如图画切割等。

将 RGB 图画转化至 HSV 色彩空间

在本节中,我们将介绍以下内容,运用 Scikit-Image.Color 模块的 RGB2HSV()HSV2RGB() 函数将五颜六色图画从RGB转化为HSV 色彩空间,我们还将研讨修改 H(hue)S(saturation)V(value) 通道中的值对图画的影响。

接下来,我们实现将图画从 RGB 色彩空间转化到 HSV 色彩空间,并返回转化后的图画。

首要导入所需的库、模块和函数,然后读取输入 RGB 五颜六色图画:

from skimage.io import imread
from skimage.color import rgb2hsv, hsv2rgb
import numpy as np
import matplotlib.pyplot as plt

运用 skimage.rgb2hsv() 函数将其转化为 HSV 色彩空间,并且运用 Numpyclip() 函数来保证输出像素值在 [0,1] 区间内:

im = imread("1.png")
im_hsv = np.clip(rgb2hsv(im), 0, 1)

制作原始输入图画,以及转化后图画的 HSV 通道。然后,别离更改图画的 HSV 通道,修改后将图画转化回 RGB 色彩空间,以检查修改通道像素值对输出图画的影响。

使用 Scikit-image 转换图像色彩空间

运用 Matplotlib 的函数 subplots_adjust() 可以调整子图之间的边距,例如,经过指定子图之间的水平缓笔直间距来使图画展示更为紧凑:

plt.figure(figsize=(20,12))
plt.subplots_adjust(0,0,1,0.925,0.05,0.05)
plt.gray()
plt.subplot(231), plt.imshow(im_hsv[...,0]), plt.title('h', size=10), plt.axis('off')
plt.subplot(232), plt.imshow(im_hsv[...,1]), plt.title('s', size=10), plt.axis('off')
plt.subplot(233), plt.imshow(im_hsv[...,2]), plt.title('v', size=10), plt.axis('off')
im_hsv_copy = np.copy(im_hsv)
im_hsv[...,0] /= 4
plt.subplot(234), plt.imshow(np.clip(hsv2rgb(im_hsv), 0, 1)), plt.title('original image with h=h/4', size=10), plt.axis('off')
im_hsv = im_hsv_copy
im_hsv[...,1] /= 3
plt.subplot(235), plt.imshow(np.clip(hsv2rgb(im_hsv), 0, 1)), plt.title('original image with s=s/3', size=10), plt.axis('off')
im_hsv = im_hsv_copy
im_hsv[...,2] /= 5
plt.subplot(236), plt.imshow(np.clip(hsv2rgb(im_hsv), 0, 1)), plt.title('original image with v=v/5', size=10), plt.axis('off')
plt.show()

使用 Scikit-image 转换图像色彩空间

将 RGB 图画转化至 YUV 色彩空间

接下来,我们将介绍另一个色彩模型 YUV,其中通道 Y 代表亮度 (brightness),uv 通道表明色彩 (color)。我们将实现运用 color 模块函数将五颜六色图画从 RGB 空间转化为 YUV 色彩空间。

首要导入相应库中的必需函数,然后读取 RGB 输入图画,并运用 skimage.ColorRGB2YUV() 函数将其转化为 YUV 图画:

from skimage.color import rgb2yuv, yuv2rgb
im = imread("2.png")
im_Yuv = rgb2yuv(im)

使用 Scikit-image 转换图像色彩空间

别离制作 YUV 图画中的亮度 (y) 和色彩通道 (u, v),然后修改 YUV 色彩空间中每个通道的值,再运用 skimage.color.yuv2rgb() 函数将图画转化回 RGB 色彩空间,调查修改不同通道对图画的影响:

plt.figure(figsize=(20,15))
plt.subplots_adjust(0,0,1,0.925,0.05,0.05)
plt.gray()
plt.subplot(231), plt.imshow(im_Yuv[...,0]), plt.title('Y', size=10), plt.axis('off')
plt.subplot(232), plt.imshow(im_Yuv[...,1]), plt.title('u', size=10), plt.axis('off')
plt.subplot(233), plt.imshow(im_Yuv[...,2]), plt.title('v', size=10), plt.axis('off')
im_Yuv_copy = np.copy(im_Yuv)
im_Yuv[...,0] /= 2
plt.subplot(234), plt.imshow(np.clip(yuv2rgb(im_Yuv),0,1)), plt.title('original image with Y=Y/2', size=10), plt.axis('off')
im_Yuv = im_Yuv_copy
im_Yuv[...,1] /= 3
plt.subplot(235), plt.imshow(np.clip(yuv2rgb(im_Yuv),0,1)), plt.title('original image with u=u/3', size=10), plt.axis('off')
im_Yuv = im_Yuv_copy
im_Yuv[...,2] /= 4
plt.subplot(236), plt.imshow(np.clip(yuv2rgb(im_Yuv),0,1)), plt.title('original image with v=v/4', size=10), plt.axis('off')
plt.show()

使用 Scikit-image 转换图像色彩空间

从上图可以看出,下降Y通道值会下降图画的亮度(不会改动色彩),而更改 UV通道会改动图画色彩。