import cv2 import numpy as np def psnr(img1, img2): # 读取图片并转换为numpy数组 img1 = cv2.imread(img1, cv2.IMREAD_ANYDEPTH) img2 = cv2.imread(img2, cv2.IMREAD_ANYDEPTH) # 计算MSE和PSNR mse = np.mean((img1 - img2) ** 2) if mse == 0: return float('inf') else: max_pixel = 2 ** 16 - 1 # 对于16位深度的图像,像素值的最大值为2^16-1 psnr = 10 * np.log10((max_pixel ** 2) / mse) return psnr # 测试代码 if __name__ == '__main__': img1_path = '50-5s_X1.tif' img2_path = 'denoised_image(2).tif' psnr_value = psnr(img1_path, img2_path) print('PSNR value: {:.2f}'.format(psnr_value))
时间: 2024-04-22 14:21:38 浏览: 243
使用python和cv2进行图像拼接并计算PSNR
这段代码是一个计算图像相似度指标PSNR(Peak Signal-to-Noise Ratio)的函数psnr,其中包含如下步骤:
1. 导入OpenCV和Numpy库。
2. 定义一个psnr函数,用于计算两张图片的PSNR值。该函数接收两个参数img1和img2,分别表示两张图片的路径。函数内部首先将这两张图片读取并转换为numpy数组。
3. 然后计算两张图片的MSE(Mean Squared Error)值,MSE表示两张图片像素之间的均方误差。MSE越小,说明两张图片越相似。
4. 如果MSE等于0,则PSNR为正无穷,否则计算PSNR值。在这里,max_pixel表示像素值的最大值(对于16位深度的图像,最大值为2^16-1)。PSNR值越高,说明两张图片越相似。
5. 最后返回PSNR值。
6. 测试代码中,给定两张图片的路径作为输入,计算它们的相似度指标PSNR,并输出结果。
阅读全文