import cv2
import numpy as np
def max_filter(image,filter_size):
empty_image=np.full((image.shape[0]+(filter_size//2)*2,image.shape[1]+(filter_size//2)*2),-1)
#原始图像填充进矩阵
empty_image[(filter_size//2):empty_image.shape[0]-(filter_size//2),(filter_size//2):empty_image.shape[1]-(filter_size//2)]=image.copy()
result = np.full((image.shape[0], image.shape[1]), -1)
#遍历原图像中的每个像素点,对于点,选取其周围(filter_size*filter_size)个像素中的最大值,作为结果矩阵中的对应位置值
for h in range(filter_size//2,empty_image.shape[0]-filter_size//2):
for w in range(filter_size//2, empty_image.shape[1]-filter_size//2):
filter=empty_image[h-(filter_size//2):h+(filter_size//2)+1,
w-(filter_size//2):w+(filter_size//2)+1]
result[h-filter_size//2,w-filter_size//2]=np.amax(filter)
return result
def min_filter(image,filter_size):
empty_image=np.full((image.shape[0]+(filter_size//2)*2,image.shape[1]+(filter_size//2)*2),400)
#原始图像填充进矩阵
empty_image[(filter_size//2):empty_image.shape[0]-(filter_size//2),
(filter_size//2):empty_image.shape[1]-(filter_size//2)]=image.copy()
result=np.full((image.shape[0],image.shape[1]),400)
#遍历原图像中的每个像素点,对于点,选取其周围(filter_size*filter_size)个像素中的最小值,作为结果矩阵中的对应位置值
for h in range(filter_size//2,empty_image.shape[0]-filter_size//2):
for w in range(filter_size//2, empty_image.shape[1]-filter_size//2):
filter=empty_image[h-(filter_size//2):h+(filter_size//2)+1,
w-(filter_size//2):w+(filter_size//2)+1]
result[h-filter_size//2, w-filter_size//2]=np.amin(filter)
return result
def shadow_adjustment(image_path):
image=cv2.imread(image_path,0)
max_result=max_filter(image,30)
min_result=min_filter(max_result,30)
result=image-min_result
result=cv2.normalize(result, None,0,255,norm_type=cv2.NORM_MINMAX)
return result
if __name__=="__main__":
result=shadow_adjustment('C:/Users/xpp/Desktop/Lena.png')
cv2.imwrite("C:/Users/xpp/Desktop/result.png",result)
算法:图像阴影调整是通过填充全图像的最大值和最小值来调整图像阴影。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!