import numpy as np
from PIL import Image
from scipy import signal
import cv2
def load_image(path):
#从路径中读取图片
img = cv2.imread(path)
#拆分图片通道
b, g, r = cv2.split(img)
# 将矩阵中的值空值在0-1范围内 归一化
return np.asarray(b) / 255.0,np.array(g) / 255.0,np.array(r) / 255.0
def save(path, img):
#重新回执图片通道值
tmp = np.asarray(img * 255.0, dtype=np.uint8)
#保存图片到指定路径
Image.fromarray(tmp).save(path)
def denoise_image(inp):
# 滤波函数 11 是核大小
# bg = signal.medfilt(inp, kernel_size=(11, 11, 11))
bg = signal.medfilt2d(np.array(inp), 31)
#滤波二次去除
bg = signal.medfilt2d(np.array(bg), 17)
#滤波三次去除
bg = signal.medfilt2d(np.array(bg), 31)
#保存背景图片
save('background.jpg', bg)
#对比判断获取mask遮罩
mask = inp < bg - 0.25
print(mask)
save('foreground_mask.jpg', mask)
#替换这种中的的图片值为白色
return np.where(mask, inp, 1.0)
inp_path = '00039.jpg'
out_path = 'out.jpg'
#加载并拆分图片
b,g,r = load_image(inp_path)
#获取蓝色通道
outb = denoise_image(b)
#获取绿色通道
outg = denoise_image(g)
#获取红色通道
outr = denoise_image(r)
#合并三通道
out = cv2.merge([outr,outg,outb])
#保存数据到指定路径
save(out_path, out)
Python文本彩色图像去污
最新推荐文章于 2023-06-04 02:26:53 发布