高斯滤波和中值滤波混合滤波,python代码
时间: 2023-11-12 10:01:49 浏览: 207
以下是使用OpenCV库实现高斯滤波和中值滤波混合滤波的Python代码示例:
```python
import cv2
# 读取图像
img = cv2.imread('input.jpg')
# 高斯滤波
gaussian = cv2.GaussianBlur(img, (5, 5), 0)
# 中值滤波
median = cv2.medianBlur(img, 5)
# 混合滤波
mixed = cv2.addWeighted(gaussian, 0.5, median, 0.5, 0)
# 显示图像
cv2.imshow('Input image', img)
cv2.imshow('Gaussian blur', gaussian)
cv2.imshow('Median blur', median)
cv2.imshow('Mixed blur', mixed)
# 等待按下任意按键继续
cv2.waitKey(0)
# 释放窗口资源
cv2.destroyAllWindows()
```
在上述代码中,我们使用 `cv2.GaussianBlur()` 函数实现高斯滤波,使用 `cv2.medianBlur()` 函数实现中值滤波,然后使用 `cv2.addWeighted()` 函数将两个滤波结果混合到一起,最后显示三张图像:原始图像、高斯滤波结果、中值滤波结果和混合滤波结果。
相关问题
高斯滤波和中值滤波组合,python代码
以下是使用高斯滤波和中值滤波结合的Python代码示例:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 高斯滤波
gaussian = cv2.GaussianBlur(img, (5, 5), 0)
# 中值滤波
median = cv2.medianBlur(gaussian, 5)
# 显示原始图像和处理后的图像
cv2.imshow('Original', img)
cv2.imshow('Filtered', median)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先读取了一张图像。然后使用cv2.GaussianBlur()函数进行高斯滤波,其中(5, 5)指定内核大小,0表示标准差。接下来,使用cv2.medianBlur()函数进行中值滤波,其中5表示内核大小。最后,我们将原始图像和处理后的图像显示出来,以便比较它们的差异。
高斯滤波与中值滤波python代码,不用opencv
高斯滤波(Gaussian Filter)和中值滤波(Median Filter)是两种常用的图像滤波方法,可以用于去除图像中的噪声。以下是Python实现的示例代码:
1. 高斯滤波
```python
import numpy as np
from scipy import signal
def gaussian_filter(image, sigma=1):
"""
高斯滤波函数
:param image: 待滤波的图像,要求为二维数组
:param sigma: 高斯核函数的标准差
:return: 滤波后的图像,类型与输入图像相同
"""
# 构造高斯核函数
size = int(np.ceil(3 * sigma)) * 2 + 1 # 核的大小
x, y = np.meshgrid(np.arange(-size // 2 + 1, size // 2 + 1),
np.arange(-size // 2 + 1, size // 2 + 1))
kernel = np.exp(-(x ** 2 + y ** 2) / (2 * sigma ** 2)) / (2 * np.pi * sigma ** 2)
kernel = kernel / np.sum(kernel) # 归一化核函数
# 对图像进行卷积操作
filtered_image = signal.convolve2d(image, kernel, mode='same', boundary='symm')
return filtered_image.astype(image.dtype)
```
2. 中值滤波
```python
def median_filter(image, size=3):
"""
中值滤波函数
:param image: 待滤波的图像,要求为二维数组
:param size: 滤波窗口的大小,要求为奇数
:return: 滤波后的图像,类型与输入图像相同
"""
# 对图像进行补边操作,以便于处理边界情况
pad_width = size // 2
padded_image = np.pad(image, pad_width, mode='edge')
# 对图像进行滤波操作
filtered_image = np.zeros_like(image)
for i in range(image.shape[0]):
for j in range(image.shape[1]):
filtered_image[i, j] = np.median(padded_image[i:i + size, j:j + size])
return filtered_image
```
以上代码使用了NumPy和SciPy库中的函数,可以直接在Python环境中运行。
阅读全文