1.报错情况如下:Error importing numpy:
解决方法:降低python和numpy的版本,我一开始下载安装的都是最新版的python和numpy,后来降低了版本后就不报错且可正常使用了,这里给出我使用的版本作为参考(记得卸载之前版本的python和numpy再重新安装),网上有python不同版本适配的python可以自行搜索,建议使用的python版本不要超过3.10。
2.1.使用python进行对图像进行傅里叶变换并显示原图和频谱图:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
image_path = 'D:/1212.jpg' # 这里需要换成自己图片的位置
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
# 傅里叶变换
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
# 计算频谱
magnitude_spectrum = 20 * np.log(np.abs(dft_shift) + 1)
# 显示原图
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.imshow(image, cmap='gray')
plt.title('original_image')
plt.axis('off')
# 显示频谱图
plt.subplot(122)
plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('magnitude_image')
plt.axis('off')
plt.show()
exit()
2.2.使用python实现小波变换融合两幅图像:
import cv2
import pywt # 需要安装pywt库
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
image1 = cv2.imread('D:/1313.jpg', cv2.IMREAD_GRAYSCALE) # 这里需要换成自己图片的位置
image2 = cv2.imread('D:/1414.jpg', cv2.IMREAD_GRAYSCALE) # 这里需要换成自己图片的位置
# 二维离散小波变换
c1 = pywt.dwt2(image1, 'haar')
c2 = pywt.dwt2(image2, 'haar')
# 融合小波系数
fused_cA = (c1[0] + c2[0]) / 2
fused_cH = (c1[1][0] + c2[1][0]) / 2
fused_cV = (c1[1][1] + c2[1][1]) / 2
fused_cD = (c1[1][2] + c2[1][2]) / 2
fused_c = (fused_cA.astype(np.float32),
(fused_cH.astype(np.float32),
fused_cV.astype(np.float32),
fused_cD.astype(np.float32)))
# 使用逆变换重建图像,并确保数据类型正确
fused_image = pywt.idwt2(fused_c, 'haar')
fused_image = np.clip(fused_image, 0, 255).astype(np.uint8)
# 显示原图
plt.figure(figsize=(12, 6))
plt.subplot(131)
plt.imshow(image1, cmap='gray')
plt.title('image1')
plt.axis('off')
plt.subplot(132)
plt.imshow(image2, cmap='gray')
plt.title('image2')
plt.axis('off')
# 显示融合后图像
plt.subplot(133)
plt.imshow(fused_image, cmap='gray')
plt.title('fused_image')
plt.axis('off')
plt.show()
exit()
效果图如下:
2.3.使用python对图片进行3×3和5×5的中值滤波对比效果:
import cv2
import matplotlib.pyplot as plt
# 读取图像
image_path = 'D:/1515.png' # 这里需要换成自己的图片位置
image = cv2.imread(image_path)
# 将读取到的图像转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 显示原始灰度图像
plt.figure(figsize=(10, 5))
plt.subplot(1, 3, 1)
plt.imshow(gray_image, cmap='gray')
plt.title('original_image')
plt.axis('off')
# 应用3×3窗口的中值滤波
median_filtered_image_3 = cv2.medianBlur(gray_image, 3)
# 显示3×3中值滤波后的图像
plt.subplot(1, 3, 2)
plt.imshow(median_filtered_image_3, cmap='gray')
plt.title('3×3')
plt.axis('off')
# 应用5×5窗口的中值滤波
median_filtered_image_5 = cv2.medianBlur(gray_image, 5)
# 显示5×5中值滤波后的图像
plt.subplot(1, 3, 3)
plt.imshow(median_filtered_image_5, cmap='gray')
plt.title('5×5')
plt.axis('off')
# 显示所有图像
plt.show()
exit()
效果对比图如下: