用opencv进行图像cat的理想低通滤波器图像平滑代码
时间: 2023-07-24 16:06:09 浏览: 43
以下是使用OpenCV进行图像平滑的代码示例:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 定义低通滤波器核
kernel_size = 5
kernel = cv2.getGaussianKernel(kernel_size, 0)
# 应用低通滤波器
smoothed_img = cv2.filter2D(img, -1, kernel)
# 显示原始图像和平滑后的图像
cv2.imshow("Original Image", img)
cv2.imshow("Smoothed Image", smoothed_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该代码中使用`cv2.getGaussianKernel()`函数生成了一个高斯核,然后使用`cv2.filter2D()`函数将其应用于输入图像。`kernel_size`参数定义了核的大小,越大的核会导致更强的平滑效果。在这里我们选择了一个大小为5的核。
最后,使用`cv2.imshow()`函数显示原始图像和平滑后的图像,并使用`cv2.waitKey()`等待用户按下任意键关闭窗口。
相关问题
用opencv对图像进行梯形低通滤波器图像平滑代码
下面是用OpenCV实现梯形低通滤波器图像平滑的代码:
```python
import cv2
import numpy as np
img = cv2.imread('input.jpg') # 读入图片
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图像
# 定义梯形低通滤波器
kernel = np.array([[-1, -1, -1, -1, -1],
[-1, 2, 2, 2, -1],
[-1, 2, 8, 2, -1],
[-1, 2, 2, 2, -1],
[-1, -1, -1, -1, -1]]) / 8.0
# 使用滤波器进行图像平滑
img_smooth = cv2.filter2D(img_gray, -1, kernel)
cv2.imshow('Input', img_gray)
cv2.imshow('Output', img_smooth)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这里定义了一个$5\times5$的梯形低通滤波器,然后使用`cv2.filter2D()`函数对灰度图像进行滤波,得到平滑后的图像。最后将原图和平滑后的图像显示出来。
用opencv对图像进行butterworth低通滤波器图像平滑代码
下面是使用 OpenCV 实现 Butterworth 低通滤波器图像平滑的代码:
```python
import cv2
import numpy as np
img = cv2.imread('image.jpg', 0) # 读取灰度图像
rows, cols = img.shape # 获取图像的行数和列数
crow, ccol = rows//2, cols//2 # 计算图像中心点坐标
# 构建 Butterworth 低通滤波器
d0 = 50 # 截止频率
n = 2 # 阶数
butterworth_lowpass = np.zeros((rows, cols, 2), np.float32)
for i in range(rows):
for j in range(cols):
distance = np.sqrt((i-crow)**2 + (j-ccol)**2)
butterworth_lowpass[i,j,0] = 1 / (1 + (distance/d0)**(2*n))
butterworth_lowpass[i,j,1] = 1 / (1 + (distance/d0)**(2*n))
# 将图像转换为频域
img_fft = np.fft.fft2(img)
# 将低通滤波器与图像频域相乘
img_fft_shift = np.fft.fftshift(img_fft)
img_filtered = img_fft_shift * butterworth_lowpass
# 将滤波后的图像转换回空域
img_back = np.fft.ifft2(np.fft.ifftshift(img_filtered))
img_filtered = np.real(img_back) # 取实部
# 显示原始图像和滤波后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Filtered Image', img_filtered.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`d0` 为截止频率,`n` 为阶数,可以根据需要进行调整。滤波器的形状由截止频率和阶数共同决定,当 `n=1` 时,Butterworth 滤波器与高斯滤波器具有相似的形状。