py cv2模拟光照 代码重写

本文介绍了如何利用numpy对图像处理中的光照效果和运动模糊进行优化。首先,通过设置中心点、半径和光照强度,计算每个像素到中心点的距离,并根据距离调整像素亮度。然后,使用numpy的meshgrid和where函数加速运算,避免了原始代码中的循环,提高效率的同时保持了代码的简洁。此外,还提供了一个运动模糊的链接作为进一步阅读材料。
摘要由CSDN通过智能技术生成

重写下光照代码,原文链接https://blog.csdn.net/donkey_1993/article/details/107034847
原代码:

rows, cols = img.shape[:2]
 
#设置中心点
centerX = rows / 2
centerY = cols / 2
print (centerX, centerY)
radius = min(centerX, centerY)
print (radius)
#设置光照强度
strength = 200

for i in range(rows):
    for j in range(cols):
        # 计算当前点到光照中心距离(平面坐标系中两点之间的距离)
        distance = math.pow((centerY - j), 2) + math.pow((centerX - i), 2)
        # 获取原始图像
        B, G, R = img[i, j]
        if (distance < radius * radius):
             # 按照距离大小计算增强的光照值
            result = (int)(strength * (1.0 - math.sqrt(distance) / radius))
            B = img[i, j][0] + result
            G = img[i, j][1] + result
            R = img[i, j][2] + result
            # 判断边界 防止越界
            B = min(255, max(0, B))
            G = min(255, max(0, G))
            R = min(255, max(0, R))
            img[i, j] = np.uint8((B, G, R))
        else:
            img[i, j] = np.uint8((B, G, R))
        

我用了numpy重写了下循环那部分的代码 稍微快了点 就是不易读

c_point = np.array([centerX,centerY])
y= np.arange(0,rows)
x = np.arange(0,cols)
res = np.meshgrid(x,y)
grid = np.concatenate((np.expand_dims(res[1],-1),np.expand_dims(res[0],-1)), axis=2)
distance = np.linalg.norm(c_point - grid,axis=2)
result_ =  (strength*(1 - distance / radius))
result_ = np.where(result_>0,result_,0).astype(np.int)
img = np.clip(img+np.expand_dims(result_,-1),0,255).astype(np.uint8)

再附一个 运动模糊的链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值