gpt4 book ai didi

python - 使用高斯核的 cv2.GaussianBlur 和 cv2.filter2D 会产生不同的结果吗?

转载 作者:行者123 更新时间:2023-12-02 17:30:40 33 4
gpt4 key购买 nike

我正在尝试在 Python 中移植一些 lua/torch 代码,有一个序列在图像上运行高斯模糊,如下所示:

local gauK = image.gaussian(math.ceil(3*sigma)*2+1, sigma)
inp = image.convolve(inp, gauK, 'same')

为了在我的方法中复制这一点,我一直在研究 cv2.GaussianBlur() 和 cv2.filter2D 并传入高斯内核。

方法1(cv2.GaussianBlur):

kernel_size = int(math.ceil(3 * sigma) * 2 + 1)  # same size as the lua code
blurred_image = cv2.GaussianBlur(img, ksize=(kernel_size, kernel_size), sigma)

方法2(cv2.filter2D)

kernel_size = int(math.ceil(3 * sigma) * 2 + 1)  # same size as the lua code
gaussian_kernel = cv2.getGaussianKernel(kernel_size, sigma)
blurred_image_2 = cv2.filter2D(img, -1, gaussian_kernel)

在方法 1 和方法 2 之间,我得到了不同的图像。方法 1 的图像似乎比方法 2 中的图像更加模糊。是否有任何原因导致我在这里得到不同的结果?我正在尝试找出哪一个与 lua 代码匹配。谢谢。

最佳答案

cv2.getGaussianKernel函数返回一维向量,要使其成为二维高斯矩阵,可以将其与其转置相乘(@用于矩阵乘法)。你能试试这个代码吗:

gaussian_kernel = cv2.getGaussianKernel(kernel_size, sigma)
kernel_2D = gaussian_kernel @ gaussian_kernel.transpose()
blurred_image_2 = cv2.filter2D(img, -1, kernel_2D)

关于python - 使用高斯核的 cv2.GaussianBlur 和 cv2.filter2D 会产生不同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55942863/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com