帮我用opencv 4.0.1 和python 3.8写一份代码要求如下: 使用小波变换将输入图像分解成高频、低频部分 并将高频、低频部分显示出来 随后对低频部分执行灰度形态学操作,构造 0°、45°、90°和135°四种方向的元素形状对低频部分进行灰度闭运算操作 之后采用 5×5 中值滤波 对高频部分进行去噪处理 随后使用小波逆变换将低频、高频部分重新合起来 并展示
时间: 2023-12-20 08:03:41 浏览: 84
图像加噪与滤波处理(opencv+python)
5星 · 资源好评率100%
好的,以下是代码实现:
```python
import cv2
import numpy as np
# 读取输入图像
img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
# 进行小波变换
coeffs = pywt.dwt2(img, 'haar')
cA, (cH, cV, cD) = coeffs
# 将高频、低频部分显示出来
cv2.imshow('low frequency', cA)
cv2.imshow('horizontal high frequency', cH)
cv2.imshow('vertical high frequency', cV)
cv2.imshow('diagonal high frequency', cD)
# 对低频部分进行灰度形态学操作
kernel_0 = np.array([[0, 0, 0],
[0, 1, 0],
[0, 0, 0]], dtype=np.uint8)
kernel_45 = np.array([[0, 0, 0],
[0, 1, 0],
[0, 0, 1]], dtype=np.uint8)
kernel_90 = np.array([[0, 0, 0],
[0, 1, 0],
[0, 0, 0]], dtype=np.uint8)
kernel_135 = np.array([[0, 0, 0],
[0, 1, 0],
[1, 0, 0]], dtype=np.uint8)
# 对低频部分进行灰度闭运算操作
cA_0 = cv2.morphologyEx(cA, cv2.MORPH_CLOSE, kernel_0)
cA_45 = cv2.morphologyEx(cA, cv2.MORPH_CLOSE, kernel_45)
cA_90 = cv2.morphologyEx(cA, cv2.MORPH_CLOSE, kernel_90)
cA_135 = cv2.morphologyEx(cA, cv2.MORPH_CLOSE, kernel_135)
# 对高频部分进行中值滤波
cH = cv2.medianBlur(cH, 5)
cV = cv2.medianBlur(cV, 5)
cD = cv2.medianBlur(cD, 5)
# 将低频、高频部分重新合并
new_coeffs = cA_0, (cH, cV, cD)
new_img = pywt.idwt2(new_coeffs, 'haar')
# 显示合并后的图像
cv2.imshow('output', new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注意,由于低频部分经过形态学操作后,像素值可能超出 0-255 的范围,需要进行数据类型转换。另外,代码中使用了 PyWavelets 库进行小波变换和逆变换的计算,需要先安装该库。
阅读全文