如何使用OpenCV Python找到图像的离散余弦变换?
我们使用 cv2.dct() 来找到图像的离散余弦变换。此函数将dtype float32的灰度图像转换为变换图像。它接受两种类型的标志 cv2.DCT_INVERSE 或 cv2.DCT_ROWS 。为了将变换后的图像转换回原始图像,我们使用 cv2.idct() 。
步骤
要找到输入图像的离散余弦变换,可以按照以下步骤进行:
- 导入所需的库OpenCV和NumPy。确保您已经安装了它们。
-
使用 cv2.imread() 方法读取输入图像。指定图像的完整路径。使用 cv2.cvtColor() 方法将输入图像转换为灰度图像。将灰度图像转换为 np.float32 。
-
使用 cv2.dct() 找到图像的离散余弦变换。该方法需要一个浮点的灰度图像。将 cv2.DCT_INVERSE 或 cv2.DCT_ROWS 标志传递到 cv2.dct() 函数中。使用 cv2.imshow() 方法可视化输入图像的离散变换。
-
要在离散余弦变换之后可视化输入图像,请应用逆离散余弦变换 cv2.idct() 。并将图像转换为 np.uint8 。
让我们看看查找输入图像的离散余弦变换的示例。
输入图像
我们将在以下示例中使用以下图像作为输入文件。
示例
在此示例中,我们找到输入图像的离散余弦变换。我们将标志 cv2.DCT_INVERSE 传递给 cv2.dct() 函数。
# 导入所需库
import cv2
import numpy as np
# 读入灰度图像
img = cv2.imread('leaf1.jpg', 0)
# 将灰度图像转换为float32类型
imf = np.float32(img) #float转换
# 查找离散余弦变换
dst = cv2.dct(imf, cv2.DCT_INVERSE)
# 应用逆离散余弦变换
img1 = cv2.idct(dst)
# 转换为uint8类型
img1 = np.uint8(img)
# 显示图片
cv2.imshow("DCT", dst)
cv2.waitKey(0)
cv2.imshow("IDCT back image", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
当我们运行上面的程序时,它将产生以下 输出 窗口 –
示例
在此示例中,我们找到输入图像的离散余弦变换。我们将标志 cv2.DCT_ROWS 传递给 cv2.dct() 函数。
# 导入所需的库
import cv2
import matplotlib.pyplot as plt
import numpy as np
# 将灰度图像读取为float32格式
img = cv2.imread('leaf1.jpg', 0)
imf = np.float32(img) # 转换为float32格式
# 对输入图像进行离散余弦变换
dct = cv2.dct(imf, cv2.DCT_ROWS)
# 对离散余弦变换的图像进行反变换
img1 = cv2.idct(dct)
# 转换为uint8格式
img1 = np.uint8(img)
# 显示图像
cv2.imshow("DCT", dct)
cv2.waitKey(0)
cv2.imshow("IDCT反向图像", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
运行上述程序后,将在窗口中生成以下 输出 −