使用opencv 4.0.1 和python 3.8 将图像进行小波变换 coeffs = pywt.dwt2(gray, 'haar') cA, (cH, cV, cD) = coeffs 已知cH 为266 × 500 为什么执行cH1 = cH.astype(np.uint8) cH2 = cv2.convertScaleAb(cH) 后.cH1 显示正常图像 cH2显示的图像为纯黑色
时间: 2024-01-06 22:06:29 浏览: 40
这是因为 `cv2.convertScaleAb()` 函数的参数传递有误。该函数需要传入两个参数:输入数组和输出数组。你可以将代码改为如下形式:
```
cH1 = cH.astype(np.uint8)
cH2 = np.zeros_like(cH1)
cH2 = cv2.convertScaleAbs(cH, dst=cH2)
```
这样,就可以正确地将小波变换后的系数数组转换为 OpenCV 可以显示的图像了。
相关问题
使用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类型并显示原始图像和重建后的图像。
需要注意的是,由于小波变换是一种有损压缩技术,因此重建后的图像可能会有一些细微的失真。如果需要更好的重建结果,可以尝试使用其他小波基函数或调整小波变换的参数。
图像处理 使用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() 函数显示出来。