我试着用一种简单的方式来模仿(=〉没有任何I.A.)the old trichromy process to colorize B&W photographs。
这是开始的图片:
我复制了这张图片在一个红色,绿色和蓝色的版本使用枕头:
每个过滤的图片都有一个减少的不透明度(我使用了putalpha(round(255/3)),这些都是有效的PNG文件。
然后,我尝试合并这三个示例,但最后没有颜色。在for循环后使用paste或alpha_composite的结果是相同的:
是我太乐观了,还是我错过了实现这一目标的一些东西?
- 编辑**
这是滤镜颜色函数,它当然很重,因为它将图片中每个像素的红、绿、蓝级别与滤镜颜色的红、绿、蓝级别进行比较,但是,仍然:
def color_photo(file:str,color:tuple,def_file_name:str):
"""
This function colorizes a picture based on a RGB color.
Example : put a red filter on a B&W photo.
"""
try:
format_file = file.split(".")[-1]
img = Image.open(file).convert("RGB")
pixels = img.load()
res = img.info["dpi"]
w, h = img.size
for px in range(w):
for py in range(h):
l_col = [int(new_level) if int(new_level)<int(old_level) else int(old_level) for new_level,old_level in zip(color,img.getpixel((px,py)))]
pixels[px,py] = tuple(l_col)
img.save(def_file_name+"."+format_file,dpi = res, subsampling = 0, quality = 100, optimize = True)
except:
print("You must do a mistake handling file names and/or the tuples of RGB's color instead of something like (234,125,89)")
1条答案
按热度按时间l5tcr1uw1#
三色处理从三个不同的图像或输入开始。一个是物体反射的光通过绿色滤光片,第二个通过橙子滤光片,第三个通过绿色滤光片。
你没有,你只有一个单一的输入图像,尽管它可以用RGB来表示,但是红、绿色、蓝通道都是相同的。
你根本没有任何可用的颜色信息来构建、分析或创造出与原作相似的图像。你所做的一切都纯粹是猜测。想象一下,看着图像中的每个像素,然后说“嗯,这个像素的灰度值是146,那么产生这个结果的三个R、G和B值是什么?"你怎么可能知道呢?