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 required libraries
import cv2
import numpy as np
# read input image as grayscale
img = cv2.imread('leaf1.jpg', 0)
# convert the grayscale to float32
imf = np.float32(img) # float conversion
# find discrete cosine transform
dst = cv2.dct(imf, cv2.DCT_INVERSE)
# apply inverse discrete cosine transform
img1 = cv2.idct(dst)
# convert to uint8
img1 = np.uint8(img)
# display the images
cv2.imshow("DCT", dst)
cv2.waitKey(0)
cv2.imshow("IDCT back image", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
当我们运行以上程序时,它会产生以下 输出 :
windows −
示例
在这个示例中,我们找到输入图像的离散余弦变换。我们将标志 cv2.DCT_ROWS 传递给 cv2.dct() 函数。
# import required libraries
import cv2
import matplotlib.pyplot as plt
import numpy as np
# read input image as grayscale
img = cv2.imread('leaf1.jpg', 0)
# convert the grayscale to float32
imf = np.float32(img) # float conversion
# find discrete cosine transform
dct = cv2.dct(imf, cv2.DCT_ROWS)
# apply inverse discrete cosine transform
img1 = cv2.idct(dct)
# convert to uint8
img1 = np.uint8(img)
# display the image
cv2.imshow("DCT", dct)
cv2.waitKey(0)
cv2.imshow("IDCT back image", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
当我们运行上面的程序时,它将产生以下 输出 Windows –