opencv低通滤波器python代码
时间: 2023-10-09 07:15:23 浏览: 46
以下是利用OpenCV实现低通滤波器的Python代码:
```python
import cv2
import numpy as np
# 加载图像
img = cv2.imread('test.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 定义低通滤波器内核
kernel = np.ones((5,5),np.float32)/25
# 应用低通滤波器
dst = cv2.filter2D(gray,-1,kernel)
# 显示图像
cv2.imshow('Original',gray)
cv2.imshow('Low Pass Filter',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该代码将图像转换为灰度图像,然后定义一个5x5的低通滤波器内核。应用内核后,将处理后的图像显示在屏幕上。
相关问题
opencv巴特沃兹低通滤波器python代码
以下是使用OpenCV实现巴特沃兹低通滤波器的Python代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg', 0)
# 定义巴特沃兹低通滤波器
def butterworth_lowpass_filter(img, d, n):
rows, cols = img.shape
crow, ccol = rows // 2, cols // 2
# 构建巴特沃兹低通滤波器
u, v = np.meshgrid(np.arange(cols), np.arange(rows))
d_uv = np.sqrt((u - ccol) ** 2 + (v - crow) ** 2)
H = 1 / (1 + (d / d_uv) ** (2 * n))
# 将滤波器应用于图像
img_fft = np.fft.fft2(img)
img_fft_shift = np.fft.fftshift(img_fft)
img_fft_shift_filtered = img_fft_shift * H
img_fft_filtered = np.fft.ifftshift(img_fft_shift_filtered)
img_filtered = np.fft.ifft2(img_fft_filtered)
img_filtered = np.abs(img_filtered)
return img_filtered
# 调用巴特沃兹低通滤波器函数
img_filtered = butterworth_lowpass_filter(img, 50, 2)
# 显示原始图像和滤波后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Butterworth Lowpass Filtered Image', img_filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`butterworth_lowpass_filter`函数接受三个参数:输入图像`img`、截止频率`d`和阶数`n`。函数返回经过巴特沃兹低通滤波器处理后的图像。
opencv实现巴特沃斯低通滤波器 python
巴特沃斯低通滤波器是一种常用的频率域滤波器,可以在图像处理中用于平滑图像、去除高频噪声并保留更多的图像细节。在Python中,可以使用OpenCV库来实现巴特沃斯低通滤波器。
下面是一个使用OpenCV实现巴特沃斯低通滤波器的示例代码[^1]:
```python
import cv2
import numpy as np
def butterworth_lowpass_filter(image, cutoff_frequency, order):
# 获取图像的尺寸
rows, cols = image.shape
# 创建一个与输入图像相同尺寸的零矩阵
mask = np.zeros((rows, cols), dtype=np.float32)
# 计算中心点坐标
center_x = int(cols / 2)
center_y = int(rows / 2)
# 根据巴特沃斯低通滤波器的公式计算滤波器值
for i in range(rows):
for j in range(cols):
distance = np.sqrt((i - center_y) ** 2 + (j - center_x) ** 2)
mask[i, j] = 1 / (1 + (distance / cutoff_frequency) ** (2 * order))
# 将滤波器应用于输入图像的傅里叶变换
fft_image = np.fft.fft2(image)
fft_shift = np.fft.fftshift(fft_image)
filtered_shift = fft_shift * mask
filtered_image = np.fft.ifftshift(filtered_shift)
filtered_image = np.fft.ifft2(filtered_image)
filtered_image = np.abs(filtered_image)
return filtered_image
# 读取输入图像
image = cv2.imread('input.jpg', 0)
# 设置巴特沃斯低通滤波器的截止频率和阶数
cutoff_frequency = 30
order = 2
# 应用巴特沃斯低通滤波器
filtered_image = butterworth_lowpass_filter(image, cutoff_frequency, order)
# 显示原始图像和滤波后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Filtered Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
请注意,上述代码中的`input.jpg`是输入图像的文件名,你需要将其替换为你自己的图像文件名。此外,你还可以根据需要调整截止频率和阶数来控制滤波效果。