import os
import cv2
import time
import numpy as np
f = open("paras.txt")
mask_size = int(f.readline().split("\n")[0])
input_path = f.readline().split("\n")[0]
output_path = f.readline().split("\n")[0]
f.close()
for imgname in os.listdir(input_path):
print('Processing %s'%imgname)
begin = time.time()
img = cv2.imread(os.path.join(input_path,imgname))
rows,cols,_ = img.shape
mask = np.zeros((rows,cols),np.uint8)
mask = cv2.circle(mask,(int(rows/2),int(cols/2)),mask_size,1,-1)#画圆的图像,圆心坐标,半径,颜色,形状
img0 = img[:,:,0]
img1 = img[:,:,1]
img2 = img[:,:,2]
f0 = np.fft.fft2(img0)#傅里叶变换,窗口的四角分布低频部分
f0shift = np.fft.fftshift(f0)#低频(频谱图中的高亮度区域)转移到中心 #图像的能量主要集中在低频部分即频谱图的中央,四个角的高频部分幅值非常小
f0shift = f0shift*mask#保留圆内的低频部分,舍弃其余部分
f0ishift = np.fft.ifftshift(f0shift)
blur0 = np.abs(np.fft.ifft2(f0shift))
f1 = np.fft.fft2(img1)
f1shift = np.fft.fftshift(f1)
f1shift = f1shift*mask
f1ishift = np.fft.ifftshift(f1shift)
blur1 = np.abs(np.fft.ifft2(f1shift))
f2 = np.fft.fft2(img2)
f2shift = np.fft.fftshift(f2)
f2shift = f2shift*mask
f2ishift = np.fft.ifftshift(f2shift)
blur2 = np.abs(np.fft.ifft2(f2shift))
blur0_mean = np.mean(blur0)
blur1_mean = np.mean(blur1)
blur2_mean = np.mean(blur2)
img0 = np.subtract(img0,blur0) + blur0_mean
img1 = np.subtract(img1,blur1) + blur1_mean
img2 = np.subtract(img2,blur2) + blur2_mean
img = np.stack((img0,img1,img2),axis=2)
img[img<0] = 0
img[img>255] = 255
img = img.astype(np.uint8)
cv2.imwrite(os.path.join(output_path,imgname),img)
end = time.time()
print('%s finished, time cost: %.2f s'%(imgname,end-begin))
mask匀光算法
最新推荐文章于 2023-11-24 22:55:25 发布