Python计算两张图片的相似度

举报
wh_bn 发表于 2021/12/15 22:24:21 2021/12/15
【摘要】 代码比较容易,主要的工作是安装相关的包,网络不太好,安装了挺久的时间。 使用pip install 安装,如果安装不成功,把包的下载地址复制后使用迅雷进行下载。 然后再运行pip instll "下载包的路径",就可以了。不过迅雷会自动得把whl文件加上zip的后缀,在下载好之后需要手动修改。 其他没有什么问题了。 &...

代码比较容易,主要的工作是安装相关的包,网络不太好,安装了挺久的时间。

使用pip install 安装,如果安装不成功,把包的下载地址复制后使用迅雷进行下载。

然后再运行pip instll "下载包的路径",就可以了。不过迅雷会自动得把whl文件加上zip的后缀,在下载好之后需要手动修改。

其他没有什么问题了。

 


  
  1. # coding=utf-8
  2. # 导入python包
  3. from skimage.measure import compare_ssim as ssim
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. import cv2
  7. def mse(imageA, imageB):
  8. # 计算两张图片的MSE指标
  9. err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
  10. err /= float(imageA.shape[0] * imageA.shape[1])
  11. # 返回结果,该值越小越好
  12. return err
  13. '''
  14. SSIM 的范围是[-1,1]
  15. 当SSIM=-1时表示两张图片完全不相似
  16. 当SSIM= 1时表示两张图片非常相似。
  17. 即该值越接近1说明两张图片越相似。
  18. '''
  19. def compare_images(imageA, imageB, title):
  20. # 分别计算输入图片的MSE和SSIM指标值的大小
  21. m = mse(imageA, imageB)
  22. s = ssim(imageA, imageB)
  23. print("%s MSE: %.2f, SSIM: %.2f" % (title,m, s))
  24. return
  25. # 创建figure
  26. fig = plt.figure(title)
  27. plt.suptitle("MSE: %.2f, SSIM: %.2f" % (m, s))
  28. print("%s MSE: %.2f, SSIM: %.2f" % (title,m, s))
  29. # 显示第一张图片
  30. ax = fig.add_subplot(1, 2, 1)
  31. plt.imshow(imageA, cmap = plt.cm.gray)
  32. plt.axis("off")
  33. # 显示第二张图片
  34. ax = fig.add_subplot(1, 2, 2)
  35. plt.imshow(imageB, cmap = plt.cm.gray)
  36. plt.axis("off")
  37. plt.tight_layout()
  38. plt.show()
  39. # 读取图片
  40. a1_image = cv2.imread(r"a1.jpg")
  41. a2_image = cv2.imread(r"a2.jpg")
  42. a3_image = cv2.imread(r"a3.jpg")
  43. a4_image = cv2.imread(r"a4.jpg")
  44. a5_image = cv2.imread(r"a5.jpg")
  45. # 将彩色图转换为灰度图
  46. a1 = cv2.cvtColor(a1_image, cv2.COLOR_BGR2GRAY)
  47. a2 = cv2.cvtColor(a2_image, cv2.COLOR_BGR2GRAY)
  48. a3 = cv2.cvtColor(a3_image, cv2.COLOR_BGR2GRAY)
  49. a4 = cv2.cvtColor(a4_image, cv2.COLOR_BGR2GRAY)
  50. a5 = cv2.cvtColor(a5_image, cv2.COLOR_BGR2GRAY)
  51. '''
  52. # 初始化figure对象
  53. fig = plt.figure("Images")
  54. images = ("a1", a1), ("a2", a2), ("a3", a3)
  55. # 遍历每张图片
  56. for (i, (name, image)) in enumerate(images):
  57. # 显示图片
  58. ax = fig.add_subplot(1, 3, i + 1)
  59. ax.set_title(name)
  60. plt.imshow(image, cmap = plt.cm.gray)
  61. plt.axis("off")
  62. plt.tight_layout()
  63. #plt.show()
  64. '''
  65. # 比较图片
  66. compare_images(a1, a1, "a1 vs a1")
  67. compare_images(a1, a2, "a1 vs a2")
  68. compare_images(a1, a3, "a1 vs a3")
  69. compare_images(a2, a3, "a2 vs a3")
  70. compare_images(a4, a4, "a4 vs a4")
  71. compare_images(a4, a5, "a4 vs a5")

结果:


  
  1. a1 vs a1 MSE: 0.00, SSIM: 1.00
  2. a1 vs a2 MSE: 7981.40, SSIM: 0.14
  3. a1 vs a3 MSE: 7959.42, SSIM: 0.14
  4. a2 vs a3 MSE: 963.59, SSIM: 0.86
  5. a4 vs a4 MSE: 0.00, SSIM: 1.00
  6. a4 vs a5 MSE: 33.68, SSIM: 0.98

 

 

 

文章来源: blog.csdn.net,作者:fengda2870,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fengda2870/article/details/101109339

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。