Python 数字图像处理之图像光照效果的实现

Python 数字图像处理之图像光照效果的实现

工具:VS Code、图像文件
Python模块:cv2、math、numpy
Python 数字图像处理之图像光照效果的实现_第1张图片
1. 导入相应的Python模块

import cv2              #用以读取图像文件
import math
import numpy as np

2. 读取图像文件

img=cv2.imread("111.jpg")    #参数为图像文件名

3. 获取图像的高和宽(行列值)

rows,cols = img.shape[:2]
注:[0:2]是切片的意思,.shape 应当是OpenCV模块中处理图片的,是图片的一个属性,这个属性是个列表 ,然后对这个列表切片操作。
例子:h,w = img.shape[:2] 获取彩色图片的高、宽,并且赋值给h和w;如果是h,w,v = img.shape[:3] 获取彩色图片的高、宽、通道,并赋值给h w v

此处转自:https://blog.csdn.net/Mr_LanGX/article/details/120275615

4. 设置中心点

centerX=rows/2      #可以根据自己需求去设置XY的位置
centerY=rows/2
print(centerX,centerY)
radius = min(centerX,centerY)  #增亮半径
print(radius)
运行结果:
344.0 344.0
344.0

5. 光照效果的实现

strength = 300   #自定义光照亮度
dst = np.zeros((rows,cols,3),dtype="uint8")     #新建目标图像,矩阵中每个元素的类型为uint8

#图像光照特效
for i in range(rows):
    for j in range(cols):
        distance = math.pow((centerY-j),2)+math.pow((centerX-i),2)    #计算当前点到光照中心距离
        
        B=img[i,j][0]   #获取原始图像
        G=img[i,j][1]
        R=img[i,j][2]
        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))
            dst[i,j]=np.uint8((B,G,R))  #生成处理后的图像
        else:
            dst[i,j]=np.uint8((B,G,R))

6. 显示图像

cv2.imshow('src',img)
cv2.imshow('dst',dst)
cv2.waitKey()
cv2.destroyAllWindows.destroyAllWindows()

处理结果:

你可能感兴趣的:(Python图像处理,python,opencv)