用png图片实现复杂场景的光源变化效果

目录

1.基本逻辑

2.被处理图片

3.处理png的代码

4.图片处理后的效果

5.后期应用


1.基本逻辑

        - 找出灯源通道相对弱势通道的差值,用作通透度

        - 找出最暗的通道,用在rgb三通道,形成灰色的基色

2.被处理图片

结构内部有变色的光源,目前为红色偏蓝色,所以根据图片调整参数和计算逻辑如下节

3.处理png的代码

# pip install pillow for PIL
from PIL import Image

def process(pixel):
    # 根据红色通道来觉得处理力度
    rate = pixel[0] / 255 

    # 计算需变色区域的无光颜色
    m = min(pixel[1], pixel[2])
    avg = (pixel[0] + pixel[1] + pixel[2]) // 3
    c = round(m*rate + avg*(1-rate))

    # 计算需变色区域的变色力度
    c_ref = round(pixel[1] * (1-rate))
    t = 255 - (pixel[0] - c_ref)

    # 只计算需处理的区域
    if (pixel[3] == 255):
        # 对于普通区域
        if (pixel[0] > pixel[1]*1.5):
            return (c, c, c, t)
        # 对于高亮区域判定规则不同
        elif (pixel[0] > 250 \
            and pixel[1] < 240 \
            and pixel[2] < 240 \
            ):
            return (c, c, c, t)

    return (pixel[0], pixel[1], pixel[2], pixel[3])


def change_image_channels(image, image_path, func):
    if image.mode == 'RGBA':
        width,height = image.size
        pixel = image.load()
        for y in range(0, height):
            for x in range(0, width):
                pixel[x,y] = func(pixel[x,y])
        image.save(image_path)

    return image
 
if __name__ == "__main__":
    image = Image.open("./test.png")
    new_image = change_image_channels(image, "./out.png", process)
    print(new_image.mode)

4.图片处理后的效果

绿色为在visual studio里面打开png看到的通透效果(有些很弱的红色还残留着,比如左下较亮的侧面,有些区域通透的很夸张比如中间偏下两个两块之间的部分)

在Windows图形编辑器Paint中打开的效果(没看到通透图层,类似白光效果)

5.后期应用

在此图层下叠加变色光源

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值