使用python为非矩形图像添加羽毛效果

Posted

技术标签:

【中文标题】使用python为非矩形图像添加羽毛效果【英文标题】:Add feather effect to non-rectangular images using python 【发布时间】:2021-12-30 09:11:35 【问题描述】:

我想将羽化效果应用到图像的边缘。

例如:

使用矩形图像非常简单。但我无法在非矩形图像(具有透明背景的图像)上找到一种方法。

这是一个例子:

我用opencvPIL 尝试了各种方法,但没有运气。

【问题讨论】:

你必须有一个 alpha 通道的蒙版图像。然后模糊蒙版的边缘并使用它代替原始的 Alpha 通道。请参阅我在***.com/questions/63001988/… 的回答中的示例 【参考方案1】:
import numpy as np
import cv2
# import the image
input_image = cv2.imread('VagcO.png')
# get the number of rows & columns in m & n respectively 
n , m = input_image.shape[0], input_image.shape[1]
# copy the image for image processing
output = np.copy(input_image)
# loop on RGB channels
for layer in range(3):
    value = 255
    # loop for bottom of image only 15 rows pixel
    for row in reversed(range(n)[n-15:]):
        # loop for every column pixel in that row
        for column in range(m):
            # checking if every pixel is zero for usualy for background of images
            if output[row,column,0]==0 and output[row,column,1]==0 and output[row,column,2]==0:
                # skip that pixel
                continue
            # chaning the value to 255 and decrementing on every iteration
            output[row,column,layer] = value 
        value = value - 2
        
cv2.imshow('Original', input_image)
# crop the image to apply the bluring filter
cropedImage = output[n-20:, :, :]
mask = cv2.GaussianBlur(mask, (9,9), sigmaX=1, sigmaY=10, borderType = cv2.BORDER_DEFAULT)       
# remaning part of image
output = output[:n-20, : , :]
# adding both part into one image
feathredimg = np.concatenate((output, cropedImage), axis=0)
cv2.imshow("Freathred Image", feathredimg)
cv2.waitKey(0)
cv2.destroyAllWindows() 

我为给定问题创建了解决方案。看一看。希望这可以帮助! 此代码与给定的示例图像完美配合。 enter image description here

【讨论】:

以上是关于使用python为非矩形图像添加羽毛效果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中裁剪非矩形区域

jquery animate 使用方形矩形图像创建缩小效果以适应窗口宽度或高度并保持纵横比

如何使用 Python PIL 模糊图像的非矩形或圆形区域?

如何使用 Python 用新图像替换图像中的轮廓(矩形)?

在 jFrame 中加载带有图像的面板:组件必须为非空

按矩形中心垂直对齐 SVG 内的矩形元素