用python 编写一段程序,完成以下内容: 用cv2.imread读入png彩色图像并展示,图片Lenna.png转换成JPEGG格式并用cv2.imwrite 再读入 Lenna. jpg,比较两个图像数据,它们是否相等?为什么?计算两个图像数据之间的 PSNR 值。
时间: 2023-04-12 19:02:06 浏览: 228
两幅图像的特征相似性对比Python代码整合
以下是 Python 代码:
```python
import cv2
# 读入 PNG 彩色图像并展示
img_png = cv2.imread('Lenna.png', cv2.IMREAD_COLOR)
cv2.imshow('PNG Image', img_png)
cv2.waitKey(0)
# 将 PNG 图像转换成 JPEG 格式并保存
cv2.imwrite('Lenna.jpg', img_png, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
# 读入 JPEG 图像并展示
img_jpg = cv2.imread('Lenna.jpg', cv2.IMREAD_COLOR)
cv2.imshow('JPEG Image', img_jpg)
cv2.waitKey(0)
# 比较两个图像数据是否相等
if img_png.shape == img_jpg.shape and not (img_png != img_jpg).any():
print('两个图像数据相等')
else:
print('两个图像数据不相等')
# 计算两个图像数据之间的 PSNR 值
mse = ((img_png - img_jpg) ** 2).mean()
psnr = 10 * (cv2.cv2_log10(255 ** 2 / mse))
print('PSNR 值为:', psnr)
```
对于第一个问题,程序会读入 Lenna.png 图像并展示,然后将其转换成 JPEG 格式并保存为 Lenna.jpg,再读入 Lenna.jpg 图像并展示。接着,程序会比较两个图像数据是否相等,如果相等,则输出“两个图像数据相等”,否则输出“两个图像数据不相等”。最后,程序会计算两个图像数据之间的 PSNR 值,并输出结果。
注意:在比较两个图像数据是否相等时,我们使用了 numpy 库中的 any() 函数,该函数用于判断数组中是否存在任意一个非零元素。如果两个图像数据相等,则它们的形状应该相同,且它们的每个像素值也应该相同,因此我们可以使用 not (img_png != img_jpg).any() 来判断它们是否相等。
阅读全文