mask匀光算法

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))
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值