ython opencv 使用小波变换dwt2后将图像重构回去 coeffs = pywt.dwt2(gray, 'haar')
时间: 2023-12-29 19:06:19 浏览: 32
将小波变换后得到的系数 coeffs 作为参数,使用 pywt.idwt2() 函数即可将图像重构回去。具体代码如下:
```python
import cv2
import pywt
# 读取灰度图像
img = cv2.imread('lena.png', cv2.IMREAD_GRAYSCALE)
# 进行二维小波变换
coeffs = pywt.dwt2(img, 'haar')
# 将小波系数分别取出
LL, (LH, HL, HH) = coeffs
# 将 LL 系数放回 coeffs 中
coeffs = LL, (None, None, None)
# 进行小波反变换
reconstructed_img = pywt.idwt2(coeffs, 'haar')
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Reconstructed Image', reconstructed_img.astype(int))
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,LL 为低频系数,LH、HL、HH 分别为水平、垂直、对角线方向的高频系数。在将系数传给 pywt.idwt2() 函数进行反变换时,只需要将 LL 系数放回 coeffs 中即可。最后将重构后的图像转换为整型并显示出来。
相关问题
图像处理 使用python 3.8和opencv 4.0.1 图像进行小波变换coeffs = pywt.dwt2(gray, 'haar')、cA, (cH, cV, cD) = coeffs 如何进行逆变换 将逆变换的图像显示出来 请示例
使用 PyWavelets 库进行小波变换的逆变换可以使用 idwt2() 函数,使用 OpenCV 进行图像显示可以使用 imshow() 函数。下面是一个简单的示例代码:
```python
import cv2
import pywt
import numpy as np
# 读取图像
img = cv2.imread('lena.png', cv2.IMREAD_GRAYSCALE)
# 进行小波变换
coeffs = pywt.dwt2(img, 'haar')
cA, (cH, cV, cD) = coeffs
# 将 cA 系数设为 0,只保留细节系数
cA = np.zeros_like(cA)
# 进行小波逆变换
coeffs = cA, (cH, cV, cD)
reconstructed_img = pywt.idwt2(coeffs, 'haar')
# 将图像转换为整型并显示出来
reconstructed_img = reconstructed_img.astype(np.uint8)
cv2.imshow('Reconstructed Image', reconstructed_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
代码中首先读取了一张灰度图像,并使用 pywt.dwt2() 函数进行小波变换。将得到的系数分别赋值给 cA、cH、cV、cD 四个变量。
为了进行小波逆变换,我们将 cA 系数设为 0,只保留细节系数,然后使用 pywt.idwt2() 函数进行反变换,得到重构后的图像。
最后,将重构后的图像转换为整型并使用 OpenCV 的 imshow() 函数显示出来。
使用opencv 4.0.1 和python 3.8 将图像进行小波变换 coeffs = pywt.dwt2(gray, 'haar') cA, (cH, cV, cD) = coeffs 已知cH 为266 × 500 如何再使用小波逆变换 完美复原图像
要使用小波逆变换进行完美的图像复原,可以使用以下步骤:
1. 将小波系数放回到一个元组中:coeffs = (cA, (cH, cV, cD))。
2. 使用小波逆变换函数pywt.idwt2()将元组作为参数,得到重建后的图像。代码如下:
```python
import pywt
import numpy as np
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行小波变换
coeffs = pywt.dwt2(gray, 'haar')
cA, (cH, cV, cD) = coeffs
# 将小波系数放回到一个元组中
coeffs = (cA, (cH, cV, cD))
# 使用小波逆变换函数将元组作为参数,得到重建后的图像
reconstructed = pywt.idwt2(coeffs, 'haar')
# 将重建后的图像转换为uint8类型
reconstructed = np.uint8(reconstructed)
# 显示原始图像和重建后的图像
cv2.imshow('Original', img)
cv2.imshow('Reconstructed', reconstructed)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码将读取一张图像,然后将它转换为灰度图像,并进行小波变换。接着,将小波系数放回到一个元组中,并使用小波逆变换函数重建图像。最后,将重建后的图像转换为uint8类型并显示原始图像和重建后的图像。
需要注意的是,由于小波变换是一种有损压缩技术,因此重建后的图像可能会有一些细微的失真。如果需要更好的重建结果,可以尝试使用其他小波基函数或调整小波变换的参数。