非常抱歉给你带来困扰。出现 'src data type = 15 is not supported' 错误是由于 OpenCV 不支持当前图像的数据类型。

为了解决这个问题,你可以尝试将图像的数据类型转换为支持的类型,例如 np.float32

以下是修改后的代码:

import numpy as np
import cv2
import matplotlib.pyplot as plt

# 加载BMP图像
image_path = 'your_image.bmp'  # 替换为实际的BMP图像路径
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
height, width = image.shape

# 分块8x8的二维DFT变换
dft_image = np.zeros_like(image, dtype=np.complex128)
for i in range(0, height, 8):
    for j in range(0, width, 8):
        block = np.float32(image[i:i+8, j:j+8])
        dft_block = cv2.dft(block.astype(np.float32), flags=cv2.DFT_COMPLEX_OUTPUT)
        dft_image[i:i+8, j:j+8] = dft_block[:, :, 0] + 1j * dft_block[:, :, 1]

# 只保留相位并进行逆变换
dft_phase = np.angle(dft_image)
dft_inverse = cv2.idft(np.exp(1j * dft_phase), flags=cv2.DFT_SCALE)

# 显示图像
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')

plt.subplot(1, 2, 2)
plt.imshow(np.abs(dft_inverse), cmap='gray')
plt.title('Inverse DFT')

plt.show()

请将 your_image.bmp 替换为实际的BMP图像路径。运行代码后,将在一个窗口中显示原始图像和进行逆变换后的图像。

这段修正后的代码首先对图像进行8x8的二维DFT变换,并将结果存储在复数形式的数组 dft_image 中。然后,通过计算相位,提取相位谱。接下来,使用相位谱进行逆变换,得到逆变换后的图像。最后,使用 matplotlib.pyplot 库显示原始图像和逆变换后的图像。

OpenCV 错误:'src data type = 15 is not supported' 解决方法

原文地址: https://www.cveoy.top/t/topic/bAhC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录