首页 > 软件开发 > PYTHON >

opencv+python用直方图进行相似度判断、对比

来源:互联网 2023-03-16 19:13:38 371

计算图片的相似度有好几个方法, 比较简单的有直方图法。M83办公区 - 实用经验教程分享!

通过计算两个图片的直方图,然后使用compareHist函数进行对比就可以进行简单的比较。M83办公区 - 实用经验教程分享!

工具/原料

  • opencv python
  • pycharm win7

方法/步骤

  • 1

    直方图作为一种常用的方法,经常用在数据分析和图片处理过程,M83办公区 - 实用经验教程分享!

    采用直方图对比图片相似性,简单明了直观。M83办公区 - 实用经验教程分享!

    根据官网函数说明:M83办公区 - 实用经验教程分享!

    # compareHist(H1, H2, method) -> retval# @param H1 First compared histogram.# @param H2 Second compared histogram of the same size as H1.# @param method Comparison method, see cv::HistCompMethodsM83办公区 - 实用经验教程分享!

    HistCompMethods:M83办公区 - 实用经验教程分享!

    HISTCMP_BHATTACHARYYAM83办公区 - 实用经验教程分享!

    Correlation ( HISTCMP_CORREL)相关性,M83办公区 - 实用经验教程分享!

    Chi-Square ( HISTCMP_CHISQR)卡方,M83办公区 - 实用经验教程分享!

    Intersection ( HISTCMP_INTERSECT )交集法,M83办公区 - 实用经验教程分享!

    Bhattacharyya distance ( HISTCMP_BHATTACHARYYA)常态分布比对的Bhattacharyya距离法。M83办公区 - 实用经验教程分享!

    opencv python用直方图进行相似度判断、对比M83办公区 - 实用经验教程分享!

  • 2

    import cv2 as cvimport numpy as npimport copyfrom matplotlib import pyplot as pltimage = cv.imread('c:\\meiping1.png')cv.imshow("image", image)pic = cv.imread('c:\\meiping4.png')cv.imshow("pic", pic)M83办公区 - 实用经验教程分享!

    两幅图有一定相似,但大有不同。M83办公区 - 实用经验教程分享!

    另外注意 必须大小一样,否则不行!M83办公区 - 实用经验教程分享!

    opencv python用直方图进行相似度判断、对比M83办公区 - 实用经验教程分享!

    opencv python用直方图进行相似度判断、对比M83办公区 - 实用经验教程分享!

  • 3

    # 计算图1的直方图 然后分别归一化M83办公区 - 实用经验教程分享!

    histGrayImage = cv.calcHist([image], [1], None, [256], [0, 256])M83办公区 - 实用经验教程分享!

    cv.normalize(histGrayImage, histGrayImage,0,255*0.9,cv.NORM_MINMAX)M83办公区 - 实用经验教程分享!

    M83办公区 - 实用经验教程分享!

    # 计算图2的直方图然后分别归一化M83办公区 - 实用经验教程分享!

    histGrayPic = cv.calcHist([pic], [1], None, [256], [0, 256])M83办公区 - 实用经验教程分享!

    cv.normalize(histGrayPic, histGrayPic,0,255*0.9,cv.NORM_MINMAX)M83办公区 - 实用经验教程分享!

    opencv python用直方图进行相似度判断、对比M83办公区 - 实用经验教程分享!

  • 4

    显示直方图M83办公区 - 实用经验教程分享!

    plt.subplot(2, 1, 1)M83办公区 - 实用经验教程分享!

    plt.plot(histGrayImage)M83办公区 - 实用经验教程分享!

    plt.subplot(2, 1, 2)M83办公区 - 实用经验教程分享!

    plt.plot(histGrayPic)M83办公区 - 实用经验教程分享!

    plt.show()M83办公区 - 实用经验教程分享!

    opencv python用直方图进行相似度判断、对比M83办公区 - 实用经验教程分享!

  • 5

    retval1 = cv.compareHist(histGrayImage, histGrayPic, cv.HISTCMP_BHATTACHARYYA)M83办公区 - 实用经验教程分享!

    print("retval1: {}".format(retval1))M83办公区 - 实用经验教程分享!

    retval2 = cv.compareHist(histGrayImage, histGrayPic, cv.HISTCMP_CORREL)M83办公区 - 实用经验教程分享!

    print("retval2: {}".format(retval2))M83办公区 - 实用经验教程分享!

    retval3 = cv.compareHist(histGrayImage, histGrayPic, cv.HISTCMP_CHISQR)M83办公区 - 实用经验教程分享!

    print("retval3: {}".format(retval3))M83办公区 - 实用经验教程分享!

    M83办公区 - 实用经验教程分享!

    cv.waitKey(0)M83办公区 - 实用经验教程分享!

    opencv python用直方图进行相似度判断、对比M83办公区 - 实用经验教程分享!

  • 5该信息未经授权抓取自百度经验
  • 6

    从计算可以看出 相似度还是有一些的!M83办公区 - 实用经验教程分享!

    比想象的相似度要高.M83办公区 - 实用经验教程分享!

  • 注意事项

    • 图片直接彩色就计算直方图 不用转灰度。
    • 两幅图片大小要一致!

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!M83办公区 - 实用经验教程分享!


    标签: python编程语言

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码