请用python实现cv2.GaussianBlur的原始实现
时间: 2023-10-23 19:28:41 浏览: 41
好的,以下是实现代码:
```python
import cv2
import numpy as np
def my_GaussianBlur(img, kernel_size, sigma):
"""
自己实现GaussianBlur
:param img: 待处理的图像
:param kernel_size: 高斯核大小
:param sigma: 高斯核标准差
:return: 处理后的图像
"""
# 构建高斯核
kernel = np.zeros((kernel_size, kernel_size))
center = kernel_size // 2
for i in range(kernel_size):
for j in range(kernel_size):
dis = (i - center) ** 2 + (j - center) ** 2
kernel[i, j] = np.exp(-dis / (2 * sigma ** 2))
kernel = kernel / np.sum(kernel)
# 卷积计算
img_h, img_w = img.shape[:2]
kernel_h, kernel_w = kernel.shape[:2]
padding = (kernel_size - 1) // 2
img = np.pad(img, ((padding, padding), (padding, padding), (0, 0)), mode='edge')
res_img = np.zeros((img_h, img_w, 3))
for i in range(padding, img_h + padding):
for j in range(padding, img_w + padding):
roi = img[i - padding:i + padding + 1, j - padding:j + padding + 1, :]
res_img[i - padding, j - padding, :] = np.sum(roi * kernel[..., np.newaxis], axis=(0, 1))
res_img = np.clip(res_img, 0, 255).astype(np.uint8)
return res_img
# 调用实现
img = cv2.imread("test.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
res_img = my_GaussianBlur(img, 3, 1)
cv2.imshow("res_img", res_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
希望能帮到你~笑话时间:“为什么程序员总是饿着?因为忘了打饭。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈~~~”