1.主要内容

  • 直方图比较方法
  • 相关API
  • 代码演示

2.直方图比较方法——概述

  • 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度。Opencv提供的比较方法有四种:
    Correlation 相关性比较
    Chi-Square 卡方比较
    Intersection 十字交叉性
    Bhattacharyya distance 巴氏距离
  • 直方图比较方法-相关性计算(CV_COMP_CORREL)
    在这里插入图片描述
    其中
    在这里插入图片描述
    其中N是直方图BIN的个数,𝐻 ̄是均值。
    等于1,相关性最强。
    范围:-1到1
  • 直方图比较方法-卡方计算(CV_COMP_CHISQR)
    在这里插入图片描述
    H1,H2分别表示两个图像的直方图数据
    等于0,相关性最强。
  • 直方图比较方法-巴氏距离计算(CV_COMP_BHATTACHARYYA)
    在这里插入图片描述
    𝐻 ̄是均值,H1,H2分别表示两个图像的直方图数据
    等于0,相关性最强。
    范围:0到1。
  • 直方图比较方法-十字计算(CV_COMP_INTERSECT)
    在这里插入图片描述
    H1,H2分别表示两个图像的直方图数据

3.相关API

  • 首先要把图像从RGB色彩空间转换到HSV色彩空间(此时H、S比较敏感),cvtColor
  • 计算图像的直方图,然后归一化到[ 0 - 1 ] 之间calcHist和normalize 。
  • 使用上述四种比较方法之一进行比较compareHist
  • API:cv::compareHist(返回一个double类型的数据)
compareHIst(
    InputArray   h1;//直方图数据,下同
    OutputArray  h2;
    int method//比较方法,上述四种方法之一
)

直方图比较的重难点:
直方图计算并放在一个直方图中表示出来

4.演示代码

  • 加载图像数据
    在这里插入图片描述
  • 从RGB空间转化到HSV空间
    在这里插入图片描述
  • 计算直方图并归一化
    在这里插入图片描述
  • 比较直方图并返回值
    在这里插入图片描述

5.课外扩展

opencv中MatND和Mat的区别
【opencv学习笔记】025之直方图计算 - calcHist函数详解
calcHist函数
文字绘制——putText详解
OpenCV2中矩阵的归一化 normalize函数详解
String用法详解
【杂谈opencv】OpenCV中的cvRound()、cvFloor()、 cvCeil()函数讲解

6.未解疑惑

下列代码的意义

string convertToString(double d){
    ostringstream os;
    if(os<<d)
        return os.str();
    return "invalid conversion"
}
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐