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()
输出
上述代码的输出如下 −
