如何在模糊图像时使用不同的内核形状?

How to use different kernel shapes while blurring an image?

我想使用像 cv2.GaussianBlur() 这样的快速模糊函数,但它只允许矩形内核形状。有没有办法使用椭圆核形状?如果有任何其他模糊功能允许,您能否建议该功能?

不依赖于内置内核或 opencv 的内置函数,而是使用 cv2.filter2D() 函数应用您选择的具有值的 custom 内核你已经选择了!有了这个,您不仅可以应用您提到的"elliptic"内核,还可以应用您想要的任何内核。

用法如下:

import cv2
import numpy as np

img = cv2.imread('image.png')

kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)

所以在上面的代码中,内核看起来像这样:

已使用。

现在如果你想要一个 "elliptical" 内核,你可以手动构建一个 np 数组(即内核),每行和每列都有自定义值,或者你可以使用 cv2 的 cv2.getStructuringElement 函数来为您构建椭圆内核,然后您可以在 filter2D() 函数中使用此内核。

cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))

以上函数将打印:

[[0, 0, 1, 0, 0],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [0, 0, 1, 0, 0]]

哪个是你的椭圆核!