输入一副图像,实现梯形低通/高通滤波,python和openCV并输出图像
时间: 2023-07-15 19:14:34 浏览: 58
好的,以下是实现梯形低通/高通滤波的 Python 代码:
``` python
import cv2
import numpy as np
# 读入图像
img = cv2.imread('input.jpg')
# 定义梯形滤波器的大小和形状
w = img.shape[1]
h = img.shape[0]
mask = np.zeros((h, w), np.uint8)
trapezoid = np.array([[
(0.25 * w, 0.3 * h),
(0.75 * w, 0.3 * h),
(w, h),
(0, h)
]], dtype=np.int32)
cv2.fillPoly(mask, trapezoid, 255)
# 应用梯形低通滤波器
lpf_img = cv2.filter2D(img, -1, kernel=np.ones((5,5), np.float32)/25)
lpf_img = cv2.bitwise_and(lpf_img, lpf_img, mask=mask)
# 应用梯形高通滤波器
hpf_img = cv2.filter2D(img, -1, kernel=np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]]))
hpf_img = cv2.bitwise_and(hpf_img, hpf_img, mask=mask)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Trapezoid Low Pass Filter', lpf_img)
cv2.imshow('Trapezoid High Pass Filter', hpf_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 输出结果
cv2.imwrite('low_pass_output.jpg', lpf_img)
cv2.imwrite('high_pass_output.jpg', hpf_img)
```
代码中,我们读入一副图像,并定义了一个梯形滤波器的大小和形状。然后,我们应用了梯形低通滤波器和梯形高通滤波器,并将结果输出为两张图像。最后,我们使用 OpenCV 的 imshow() 函数显示了原始图像和处理后的图像。
注意,此代码是基于 OpenCV 4.5.2 版本编写的,如果您使用的是其他版本的 OpenCV,可能需要进行代码调整。