psnr的python实现
时间: 2023-12-04 17:54:29 浏览: 83
以下是Python中计算PSNR值的实现:
```python
import cv2
import numpy as np
def psnr(img1, img2):
mse = np.mean((img1 - img2) ** 2)
if mse == 0:
return float('inf')
max_pixel = 255.0
psnr = 20 * np.log10(max_pixel / np.sqrt(mse))
return psnr
# 示例
img1 = cv2.imread('img1.jpg')
img2 = cv2.imread('img2.jpg')
value = psnr(img1, img2)
print(f"PSNR value is {value} dB")
```
在此示例中,我们使用OpenCV库加载两张图像,并将它们传递给psnr函数。该函数计算两张图像之间的均方误差(MSE),然后使用MSE计算PSNR值。如果MSE等于零,则PSNR被定义为正无穷。最后,我们输出计算出的PSNR值。
相关问题
psnr python
PSNR(Peak Signal-to-Noise Ratio)是一种用于衡量图像质量的指标它可以用来评估压缩后的图像与原始图像之间的差异。在Python中计算PSNR有多种方法可以实现。
第一种方法是使用第三方库skimage中的封装好的psnr函数来计算。这个函数可以直接调用,只需要导入skimage.metrics中的peak_signal_noise_ratio并给出两张图像的路径,如下所示:
```python
from skimage.metrics import peak_signal_noise_ratio as psnr
from PIL import Image
import numpy as np
img1 = np.array(Image.open('original.jpg'))
img2 = np.array(Image.open('compress.jpg'))
print(psnr(img1, img2))
```
这种方法非常简单,直接调用封装好的函数即可得到PSNR的结果。
第二种方法是使用修改后的代码来计算PSNR。这段代码使用了PIL库来读取图像,并将图像转换为浮点数类型的数组。然后定义了一个psnr函数,计算图像的均方差(MSE),并根据MSE计算PSNR。最后,在主函数中调用psnr函数并打印结果。代码如下所示:
```python
from PIL import Image
import numpy as np
img1 = np.array(Image.open('original.jpg')).astype(np.float64)
img2 = np.array(Image.open('compress.jpg')).astype(np.float64)
def psnr(img1, img2):
mse = np.mean((img1-img2)**2)
if mse == 0:
return float('inf')
else:
return 20*np.log10(255/np.sqrt(mse))
print(psnr(img1, img2))
```
这种方法需要手动编写计算PSNR的代码,相比第一种方法更加灵活,可以根据需要进行修改和定制。
第三种方法是根据你最初提供的代码进行修改。这段代码与第二种方法类似,只是在计算MSE为0时返回的PSNR值不同。代码如下所示:
```python
from PIL import Image
import numpy as np
img1 = np.array(Image.open('original.jpg'))
img2 = np.array(Image.open('compress.jpg'))
def psnr(img1, img2):
mse = np.mean((img1-img2)**2)
if mse == 0:
return 100
else:
return 20*np.log10(255/np.sqrt(mse))
print(psnr(img1, img2))
```
这种方法是你最初的代码的修改版,只是在计算MSE为0时返回的PSNR值由无穷大改为100。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [【python】psnr原理简介及代码实现](https://blog.csdn.net/qq_42951560/article/details/115456471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
python实现psnr代码
计算两张图像之间的 PSNR (峰值信噪比)可以使用以下 Python 代码实现:
```python
import cv2
import numpy as np
def psnr(img1, img2):
mse = np.mean((img1 - img2) ** 2)
if mse == 0:
return 100
PIXEL_MAX = 255.0
return 20 * np.log10(PIXEL_MAX / np.sqrt(mse))
# 读取两张图像
img1 = cv2.imread("image1.png")
img2 = cv2.imread("image2.png")
# 计算 PSNR 值
print("PSNR value is {}".format(psnr(img1, img2)))
```
其中,`img1` 和 `img2` 分别为两张要比较的图像,可以使用 OpenCV 库读取。`psnr` 函数计算两张图像之间的 MSE(均方误差),并根据公式计算 PSNR 值。最后,打印出计算得到的 PSNR 值。
阅读全文