Gokix

一言(ヒトコト)

关注我

图像处理尝试

import torch
import torch.nn.functional as F
from PIL import Image
import torchvision.transforms as T

img_path = r'/mnt/e/something/pooltst.jpg'
img = Image.open(img_path).convert('RGB')
x = T.ToTensor()(img).unsqueeze(0)

def same_conv(x, kernel, padding=0):
    kH, kW = kernel.shape
    kernel = kernel.view(1,1,kH,kW).repeat(x.size(1),1,1,1)
    return F.conv2d(x, kernel, stride=1, padding=padding, groups=x.size(1))

def rescale_01(t):
    t_min, t_max = t.min(), t.max()
    delta = t_max - t_min
    if delta < 1e-7:
        return t - t_min
    return (t - t_min) / delta

w = torch.tensor([[ 0.0,  -1.0, 0.0],
                  [ -1.0,  1.0, -1.0],
                  [ 0.0,  -1.0, 0.0]])

blur = same_conv(x, w, padding=1)
edge = blur.abs()

edge = edge * 5
edge = edge.clamp(0.0, 1.0)

gamma = 0.4
edge = torch.pow(edge, gamma) 

edge = rescale_01(edge)

border = 15
mask = torch.ones_like(edge)
mask[..., :border, :] *= torch.linspace(0, 1, border).view(1, 1, -1, 1)
mask[..., -border:, :] *= torch.linspace(1, 0, border).view(1, 1, -1, 1)
mask[..., :, :border] *= torch.linspace(0, 1, border).view(1, 1, 1, -1)
mask[..., :, -border:] *= torch.linspace(1, 0, border).view(1, 1, 1, -1)
edge = edge * mask

out = edge

out_path = r'/mnt/e/something/filter_change.jpg'
T.ToPILImage()(out[0]).save(out_path)
print(f'Done! The photo is saved at {out_path}')

posted @ 2025-09-18 16:50  Gokix  阅读(8)  评论(0)    收藏  举报