如何使用 opencv 为图片添加“运动模糊”效果? - V2EX
ch2

如何使用 opencv 为图片添加“运动模糊”效果?

  •  
  •   ch2 May 15, 2022 1243 views
    This topic created in 1458 days ago, the information mentioned may be changed or developed.

    需求:使用 python 的 opencv 实现 adobe"方向模糊"同款效果,同时需要保留 png 的 alpha 通道
    20220515133448
    已查阅到的的 motion blur 实现会使得带 alpha 通道的图片异常,生成的产物是一片白的

    # -*- coding: utf-8 -*- import numpy as np import cv2 from PIL import Image def motion_blur(image, degree=3, angle=90): image=image.convert("RGB") array=np.asarray(image) image=cv2.cvtColor(array,cv2.COLOR_RGB2BGR) image = np.array(image) M = cv2.getRotationMatrix2D((degree / 2, degree / 2), angle, 1) motion_blur_kernel = np.diag(np.ones(degree)) motion_blur_kernel = cv2.warpAffine(motion_blur_kernel, M, (degree, degree)) motion_blur_kernel = motion_blur_kernel / degree blurred = cv2.filter2D(image, -1, motion_blur_kernel) cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX) blurred = np.array(blurred, dtype=np.uint8) blurred=Image.fromarray(cv2.cvtColor(blurred, cv2.COLOR_BGR2RGB),mode="RGB") return blurred 

    本人不熟悉图像处理的算法,想请教一下如何改进完善这个算法使其支持带有 alpha 通道的 png 图片?

    3 replies    2022-05-16 16:21:53 +08:00
    paopjian
        1
    paopjian  
       May 15, 2022
    PNG 是四通道图片啊,你第一步就把 alpha 给抹了
    jaredyam
        2
    jaredyam  
       May 16, 2022
    你这个函数包含两个部分,一部分是图像简单变换(预处理、后处理),一部分是函数核心(构造滤波器并滤波),我觉得你这个函数可以再拆。简单来看 cv2.filter2D 是逐通道(多通道可能有并行加速?)的,所以你可以:
    1. 先拆出 alpha 处理完并回去;
    2. 逐通道遍历滤波,只滤需要的通道,从而可以一直保持 alpha ;

    至于你说的「一片白」我不是很清楚。
    ch2
        3
    ch2  
    OP
       May 16, 2022
    最后使用了 pillow 的 ImageFilter 定义了一个卷积核,实现了 5*5 、角度为 90°的方向模糊
    支持 png 的 alpha 通道
    from PIL import Image, ImageFilter
    class MOTION_BLUR(ImageFilter.BuiltinFilter):
    name = "Motion_Blur"
    # fmt: off
    filterargs = (5, 5), 5, 0, (
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0,
    1, 1, 1, 1, 1,
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0,
    )
    # fmt: on
    img = Image.new('RGBA', (800, 600), (255, 255, 255, 0))
    img.filter(MOTION_BLUR)
    About     Help     Advertise     Blog     API     FAQ     Solana     2819 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 15:36 PVG 23:36 LAX 08:36 JFK 11:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86