/tmp/ipykernel_3164/1425456350.py:11: RuntimeWarning: divide by zero encountered in double_scalars psnr = 10 * np.log10((255 ** 2) / mse)
时间: 2024-02-18 16:05:40 浏览: 205
这个警告通常是因为 MSE 的值为零,导致在计算 PSNR 时出现了除以零的情况。这可能是由于原始图像和压缩后的图像完全相同导致的。
为了避免这个警告,你可以在计算 PSNR 之前添加一个检查,判断 MSE 是否为零。如果 MSE 为零,说明原始图像和压缩后的图像完全相同,此时可以直接将 PSNR 设为一个较大的值。
下面是修改后的代码示例:
```python
import cv2
import numpy as np
# 加载原始图像
img_original = cv2.imread('original_image.png', cv2.IMREAD_GRAYSCALE)
# 加载 JPEG2000 压缩后的图像
img_jp2 = cv2.imread('compressed_image.jp2', cv2.IMREAD_GRAYSCALE)
# 计算 MSE 值
mse = ((img_original - img_jp2) ** 2).mean()
# 计算 PSNR 值
if mse == 0:
psnr = float('inf')
else:
psnr = 10 * np.log10((255 ** 2) / mse)
print('PSNR:', psnr)
```
在上面的代码中,我们添加了一个 if-else 语句来检查 MSE 是否为零,并根据情况计算 PSNR 值。如果 MSE 为零,说明原始图像和压缩后的图像完全相同,此时将 PSNR 设为正无穷大。
相关问题
怎么修改/media/linux/643A-4CF3/code/SelfDeblur-master/rl.py:22: RuntimeWarning: divide by zero encountered in log10 log_i = np.log10(i) /media/linux/643A-4CF3/code/SelfDeblur-master/rl.py:10: RuntimeWarning: divide by zero encountered in log10 ret += np.log10(img) - np.log10(img_blur) /media/linux/643A-4CF3/code/SelfDeblur-master/rl.py:10: RuntimeWarning: invalid value encountered in log10 ret += np.log10(img) - np.log10(img_blur) /home/linux/.conda/envs/opencv/lib/python3.8/site-packages/skimage/color/colorconv.py:364: RuntimeWarning: invalid value encountered in multiply p = arr[..., 2] * (1 - arr[..., 1]) /home/linux/.conda/envs/opencv/lib/python3.8/site-packages/skimage/color/colorconv.py:366: RuntimeWarning: invalid value encountered in multiply t = arr[..., 2] * (1 - (1 - f) * arr[..., 1]) 进程已结束,退出代码0
这些是运行时警告,可以忽略它们,因为它们不会影响程序的运行结果。但如果你想消除这些警告,可以尝试以下方法:
- 在代码中添加警告过滤器,例如:
```
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning)
```
- 尝试使用其他函数替代np.log10,例如np.log或math.log10
- 检查你的输入数据,可能存在零值或负数,导致出现无穷或非数值,可以尝试先对数据进行处理,例如加上一个很小的值以避免出现零值。
阅读全文