python 实现图像的峰值信噪比 源代码
时间: 2024-04-29 10:24:58 浏览: 14
可以使用以下代码实现图像的峰值信噪比:
```python
import cv2
import numpy as np
# 读入图片
img = cv2.imread('image.jpg')
# 计算峰值信噪比
peak_signal = np.max(img)
noise = img - np.mean(img)
noise_signal = np.linalg.norm(noise)
psnr = 20 * np.log10(peak_signal / noise_signal)
print("图像的峰值信噪比为:", psnr, "dB")
```
注意,上面的代码仅适用于灰度图像。对于彩色图像,需要先将其转换为灰度图像。
相关问题
python实现求图像的峰值信噪比和均方误差
Python中实现求图像的峰值信噪比和均方误差可以使用NumPy和OpenCV库。
下面是一个示例代码,假设原始图像为lena.bmp,压缩后的图像为lena_compressed.bmp:
```python
import cv2
import numpy as np
# 读取原始图像和压缩后的图像
img1 = cv2.imread("lena.bmp")
img2 = cv2.imread("lena_compressed.bmp")
# 计算均方误差
mse = np.mean((img1 - img2) ** 2)
# 计算峰值信噪比
psnr = cv2.PSNR(img1, img2)
print("均方误差: ", mse)
print("峰值信噪比: ", psnr)
```
需要注意的是,OpenCV库中提供了直接计算峰值信噪比的函数cv2.PSNR(),可以方便地计算图像的PSNR值。
峰值信噪比python代码
计算峰值信噪比(Peak Signal-to-Noise Ratio,PSNR)的Python代码如下:
```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('image1.jpg')
img2 = cv2.imread('image2.jpg')
print("PSNR: ", psnr(img1, img2))
```
其中,`img1`和`img2`分别是待比较的两幅图像,可以用OpenCV库读入。函数中计算了两幅图像的均方误差(Mean Square Error,MSE),然后根据MSE计算PSNR值。如果MSE为0,说明两幅图像完全一致,此时PSNR为正无穷。否则,PSNR值越高,表示两幅图像越接近。