写一个实现引导滤波的python代码,可以使用opencv库中的函数
时间: 2024-12-20 15:24:07 浏览: 5
media_blur.zip_blur_mediaBlur_python_中值滤mediablur_中值滤波python
在Python中,我们可以使用OpenCV库来实现引导滤波(Guided Filter),它是一种用于图像处理的平滑滤波技术,能保持边缘清晰。下面是一个简单的例子,展示如何使用OpenCV的`cv2.ximgproc.guidedFilter()`函数:
```python
import cv2
import numpy as np
def guided_filter(image, p, r, eps):
"""
导向滤波函数
:param image: 输入图像
:param p: 目标像素点
:param r: 窗口半径
:param eps: 规范化因子
:return: 平滑后的图像
"""
m = r * 2 + 1 # 计算窗口大小
mean_I = cv2.boxFilter(image, -1, (m, m)) / (m * m)
mean_pI = cv2.boxFilter(image * p, -1, (m, m)) / (m * m)
cov_Ip = cv2.boxFilter((image - mean_I) * (p - mean_pI), -1, (m, m)) / (m * m)
A = np.array([[mean_I * mean_I, mean_I * mean_pI],
[mean_pI * mean_I, mean_pI * mean_pI]])
b = np.array([mean_I * image.ravel(), mean_pI * image.ravel()])
mean_g = np.linalg.solve(A + eps * np.eye(2), b).reshape(image.shape)
return mean_g
# 使用示例
image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE) # 读取图像,这里假设是灰度图
r = 5 # 窗口半径,可以根据需要调整
eps = 1e-4 # 规范化因子
smoothed_image = guided_filter(image, image, r, eps)
cv2.imshow('Original Image', image)
cv2.imshow('Guided Filter Result', smoothed_image)
cv2.waitKey(0) # 等待用户按键
cv2.destroyAllWindows()
阅读全文