/tmp/ipykernel_3164/1425456350.py:11: RuntimeWarning: divide by zero encountered in double_scalars psnr = 10 * np.log10((255 ** 2) / mse)
时间: 2024-02-18 08:05:40 浏览: 33
这个警告通常是因为 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 设为正无穷大。
相关问题
RuntimeWarning: divide by zero encountered in scalar divide m_lr_i = np.log(numerator / denominator)
这个错误是由于除数为0导致的。你可以在计算除法之前加一个判断,如果分母为0,则将结果设置为一个极大值或者0。例如,可以将代码修改为:
```
if denominator == 0:
m_lr_i = 1e9 # 或者设置为0
else:
m_lr_i = np.log(numerator / denominator)
```
这样就能避免这个错误了。另外,如果你需要处理大量的计算,可以考虑使用NumPy等库来加速计算过程。
怎么解决RuntimeWarning: divide by zero encountered in scalar divide m_lr_i = np.log(numerator / denominator)
这个警告是因为分母为0导致的,可以通过判断分母是否为0来避免这个警告,例如:
```
if denominator == 0:
m_lr_i = 0
else:
m_lr_i = np.log(numerator / denominator)
```
或者使用numpy的函数来避免这个问题,例如:
```
m_lr_i = np.log(np.divide(numerator, denominator, out=np.zeros_like(numerator), where=denominator!=0))
```
这样就可以避免这个警告了。