PIL转换功能的文档说:
[将彩色图像转换为灰度(模式“ L”)时,库使用ITU-R 601-2亮度转换:L = R * 299/1000 + G * 587/1000 +B * 114/1000
我想在计算中为R,G和B传递自定义权重。我应该如何处理?
上下文:我正在尝试模拟在黑白摄影中使用的滤色器以创建心情和对比度。例如,当拍摄黑白照片时,摄影师可以在镜头前放一个红色滤镜或一个橙色滤镜,从而得到看起来不同的照片。因此,我的想法是使用与给定滤镜相对应的权重转换彩色照片。在最简单的情况下,红色滤镜将为L = R * 1 + G * 0 + B * 0,橙色滤镜将为L = R * 0.5 + G * 0.5 + B * 0。
您可以使用语法L = R * 0.5 + G * 0.5 + B * 0
。R
,G
和B
应该是float
类型的2D数组。
uint8
类型转换为float
类型。 uint8
和PIL图像。 这里是示例代码:
import numpy as np
from PIL import Image
RGB = np.asarray(Image.open("rgb_input.png")) # Read RGB input image and convert to RGB array
RGB = RGB.astype('float') # Convert elements from uint8 to float
R, G, B = RGB[:, :, 0], RGB[:, :, 1], RGB[:, :, 2] # Split RGB to R, G and B numpy arrays.
L = R * 299/1000 + G * 587/1000 + B * 114/1000 # Convert to L (select your desired coefficients).
L = Image.fromarray(np.uint8(L)) #Format back to PIL image
L.show()
备注:我没有太多的Python经验-可能有较短的解决方案。