Mahotas - RGB 转棕褐色
棕褐色是指一种特殊的色彩效果,可使图片看起来复古而温暖。
当您看到棕褐色调的照片时,它看起来带有红褐色调。这就像通过怀旧滤镜查看图像,给人一种复古的感觉。
要将 RGB 图像转换为棕褐色,您需要转换每个像素的红色、绿色和蓝色通道以获得所需的棕褐色色调。
Mahotas 中的 RGB 到棕褐色转换
在 Mahotas 中,我们可以使用 colors.rgb2sepia() 函数将 RGB 图像转换为棕褐色调图像。
要了解转换,让我们从 RGB 颜色模型开始
- 在 RGB 中,图像由三种原色组成− 红色、绿色和蓝色。
- 图像中的每个像素都有这三种颜色的值,这决定了其整体颜色。例如,如果一个像素的红色值较高,而绿色和蓝色值较低,则它将显示为红色阴影。
- 现在,要使用 mahotas 将 RGB 图像转换为棕褐色,我们需要遵循一个特定的公式。该公式涉及计算每个像素的红色、绿色和蓝色通道的新值。
- 这些新值通过为图像提供温暖的褐色色调来创建棕褐色效果。
RGB 到棕褐色的转换步骤
以下是转换过程的简单说明 −
从 RGB 图像开始 − RGB 图像由三个颜色通道组成− 红色、绿色和蓝色。图像中的每个像素都有这三个通道的强度值,范围从 0 到 255。
计算每个像素的强度 −要转换为棕褐色,我们首先需要计算每个像素的整体强度。这可以通过对红色、绿色和蓝色通道取加权平均值来实现。
平均值中使用的权重可能因所需的棕褐色效果而异。
调整强度值 − 一旦我们有了强度值,我们就可以应用一些特定的变换来获得棕褐色效果。这些变换涉及以模仿棕褐色调的方式调整红色、绿色和蓝色通道的级别。
这可以通过增加红色通道的强度、降低蓝色通道的强度并保持绿色通道相对不变来实现。
剪切强度值 −调整后,某些强度值可能会超出有效范围(8 位图像为 0 到 255)。为了确保值保持在此范围内,我们需要对其进行剪辑。
低于 0 的值设置为 0,高于 255 的值设置为 255。
重建棕褐色图像 − 最后,使用调整后的强度值重建棕褐色图像。现在,图像呈现出所需的棕褐色调,呈现出复古的外观。
使用 mahotas.colors.rgb2sepia() 函数
mahotas.colors.rgb2sepia() 函数以 RGB 图像作为输入,并返回图像的棕褐色版本。
生成的棕褐色图像保留了原始 RGB 图像的整体结构和内容,但引入了温暖的褐色色调。
语法
以下是 mahotas − 中 rgb2sepia() 函数的基本语法
mahotas.colors.rgb2sepia(rgb)
其中,rgb 是RGB 颜色空间中的输入图像。
示例
在下面的示例中,我们使用 mh.colors.rgb2sepia() 函数将 RGB 图像转换为棕褐色图像 −
import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# 加载图像
image = mh.imread('nature.jpeg')
# 将其转换为棕褐色
sepia_image = mh.colors.rgb2sepia(image)
# 为子图创建图形和轴
fig, axis = mtplt.subplots(1, 2)
# 显示原始 RGB 图像
axes[0].imshow(image)
axes[0].set_title('RGB Image')
axes[0].set_axis_off()
# 显示棕褐色图像
axes[1].imshow(sepia_image)
axes[1].set_title('Sepia Image')
axes[1].set_axis_off()
# 调整子图之间的间距
mtplt.tight_layout()
# 显示图形
mtplt.show()
输出
以下是输出上述代码 −
使用变换因子
我们可以使用另一种将 RGB 转换为棕褐色的方法是使用预定系数调整每个颜色通道的强度,这些系数基于每个通道对最终棕褐色图像的贡献。
每个通道对棕褐色的贡献计算如下 −
TR = 0.393 * R + 0.769 * G + 0.189 * B TG = 0.349 * R + 0.686 * G + 0.168 * B TB = 0.272 * R + 0.534 * G + 0.131 * B
其中 TR、TG 和 TB 分别是红色、绿色和蓝色的变换因子。
将这些变换应用于 RGB 图像中的每个像素将产生整个棕褐色图像。
示例
以下示例显示使用 RGB 通道的变换因子 − 将 RGB 图像转换为棕褐色
import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
# 加载图像
image = mh.imread('sun.png')
# 获取图像的尺寸
height, width, _ = image.shape
# 将其转换为棕褐色
# 为棕褐色图像创建一个空数组
sepia_image = np.empty_like(image)
for y in range(height):
for x in range(width):
# 获取像素的 RGB 值
r, g, b = image[y, x]
# 计算 tr、tg、tb
tr = int(0.393 * r + 0.769 * g + 0.189 * b)
tg = int(0.349 * r + 0.686 * g + 0.168 * b)
tb = int(0.272 * r + 0.534 * g + 0.131 * b)
# 必要时对值进行标准化
if tr > 255:
tr = 255
if tg > 255:
tg = 255
if tb > 255:
tb = 255
# 在棕褐色图像数组中设置新的 RGB 值
sepia_image[y, x] = [tr, tg, tb]
# 为子图创建图形和轴
fig,axes = plt.subplots(1,2)
# 显示原始 RGB 图像
axes[0].imshow(image)
axes[0].set_title('RGB Image')
axes[0].set_axis_off()
# 显示棕褐色图像
axes[1].imshow(sepia_image)
axes[1].set_title('Sepia Image')
axes[1].set_axis_off()
# 调整子图之间的间距
plt.tight_layout()
# 显示图形
plt.show()
输出
上述代码的输出如下 −

