环境:Python3.8 和 OpenCV
内容:利用直方图比较图像相似度
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 封装图片显示函数
def image_show(image):
if image.ndim == 2:
plt.imshow(image, cmap='gray')
else:
image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
plt.imshow(image)
plt.show()
if __name__ == '__main__':
# 读取原图
img_1 = cv.imread('desk.png')
img_2 = cv.imread('lenna.png')
# 转换为灰度图
gray_1 = cv.cvtColor(img_1, cv.COLOR_BGR2GRAY)
gray_2 = cv.cvtColor(img_2, cv.COLOR_BGR2GRAY)
# 获取直方图结果
hist_1 = cv.calcHist([gray_1], [0], None, [64], [0, 256])
hist_2 = cv.calcHist([gray_2], [0], None, [64], [0, 256])
# 直方图结果归一化
hist_1 = np.float32(hist_1 / img_1.size)
hist_2 = np.float32(hist_2 / img_2.size)
# 计算相关系数
corr = cv.compareHist(hist_1, hist_2, cv.HISTCMP_CORREL)
# 输出结果
print("上述图片相似性为", corr)
# 绘制折线图
plt.figure()
plt.plot(range(0, len(hist_1)), hist_1, 'b-', label='image_1')
plt.plot(range(0, len(hist_2)), hist_2, 'r-', label='image_2')
plt.legend(loc=1)
plt.show()