用python 编写一段程序,完成以下内容: 读入图像Lenna.png 读入 Lenna. jpg,比较两个图像数据,它们是否相等?为什么?计算两个图像数据之间的 PSNR 值。skimage.metrics.peak_ signal noise_ ratio 函数用于计算峰值信号-噪声 比(PSNR):PSNR=10 1ogi0(peakval’/NSE)其中 peakval 是图像灰度级的最大值(e.g. uint8 图像为 255),MSE 是A和ref 之间的均方差。PSNR 值越大,说明A和ref 越相似,若A和ref 相等,PSNR 等于无穷大
时间: 2023-04-12 13:01:17 浏览: 70
以下是用 Python 编写的程序,可以完成读入图像 Lenna.png 和 Lenna.jpg,比较两个图像数据是否相等,并计算它们之间的 PSNR 值:
```python
import numpy as np
from skimage import io, metrics
# 读入图像 Lenna.png 和 Lenna.jpg
img1 = io.imread('Lenna.png')
img2 = io.imread('Lenna.jpg')
# 比较两个图像数据是否相等
if np.array_equal(img1, img2):
print("两个图像数据相等")
else:
print("两个图像数据不相等")
# 计算两个图像数据之间的 PSNR 值
psnr = metrics.peak_signal_noise_ratio(img1, img2)
print("PSNR 值为:", psnr)
```
如果两个图像数据相等,程序会输出“两个图像数据相等”,否则会输出“两个图像数据不相等”。无论两个图像数据是否相等,程序都会计算它们之间的 PSNR 值,并输出 PSNR 值。
相关问题
用python 编写一段程序,完成以下内容: 读入图像Lenna.png 读入 Lenna. jpg,比较两个图像数据,它们是否相等?为什么?计算两个图像数据之间的 PSNR 值。
以下是用 Python 编写的程序,可以完成上述要求:
```python
import cv2
import numpy as np
# 读入图像
img1 = cv2.imread('Lenna.png')
img2 = cv2.imread('Lenna.jpg')
# 比较两个图像数据是否相等
if np.array_equal(img1, img2):
print("两个图像数据相等")
else:
print("两个图像数据不相等")
# 计算两个图像数据之间的 PSNR 值
mse = np.mean((img1 - img2) ** 2)
if mse == 0:
psnr = 100
else:
psnr = 20 * np.log10(255.0 / np.sqrt(mse))
print("PSNR 值为:", psnr)
```
程序首先使用 OpenCV 库读入两个图像,然后使用 `np.array_equal()` 函数比较它们的数据是否相等。如果相等,程序输出“两个图像数据相等”,否则输出“两个图像数据不相等”。
接着,程序计算两个图像数据之间的 MSE(均方误差),并根据 MSE 计算 PSNR(峰值信噪比)。如果 MSE 为 0,说明两个图像数据完全相同,此时 PSNR 为 100。否则,程序使用公式 `PSNR = 20 * log10(MAX_I / sqrt(MSE))` 计算 PSNR 值,其中 MAX_I 为像素值的最大值(在本例中为 255)。最后,程序输出 PSNR 值。
注意:本程序假设两个图像的大小和通道数相同。如果两个图像的大小或通道数不同,程序可能会出错。
用python 编写一段程序,完成以下内容: 用cv2.imread读入图像Lenna.png转换成JPEGG格式并用cv2.imwrite 再读入 Lenna. jpg,比较两个图像数据,它们是否相等?为什么?计算两个图像数据之间的 PSNR 值。
以下是用 Python 编写的程序,可以完成您提出的要求:
```python
import cv2
import numpy as np
# 读入图像Lenna.png
img1 = cv2.imread('Lenna.png')
# 将图像转换成JPEG格式并保存
cv2.imwrite('Lenna.jpg', img1, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
# 读入Lenna.jpg
img2 = cv2.imread('Lenna.jpg')
# 比较两个图像数据是否相等
if np.array_equal(img1, img2):
print("两个图像数据相等")
else:
print("两个图像数据不相等")
# 计算两个图像数据之间的 PSNR 值
mse = np.mean((img1 - img2) ** 2)
if mse == 0:
print("两个图像完全相同")
else:
psnr = 10 * np.log10(255.0 ** 2 / mse)
print("PSNR 值为:", psnr)
```
在上述程序中,我们首先使用 `cv2.imread` 函数读入图像 `Lenna.png`,然后使用 `cv2.imwrite` 函数将图像转换成 JPEG 格式并保存为 `Lenna.jpg`。接着,我们再次使用 `cv2.imread` 函数读入 `Lenna.jpg`,并使用 `np.array_equal` 函数比较两个图像数据是否相等。最后,我们计算两个图像数据之间的 PSNR 值,其中 `mse` 表示均方误差,`psnr` 表示峰值信噪比。
需要注意的是,由于 JPEG 压缩是有损压缩,因此转换后的图像数据与原始图像数据可能存在一定的差异,导致两个图像数据不完全相等。另外,PSNR 值越大表示两个图像之间的差异越小,因此 PSNR 值越高越好。