一、直方图比较
- 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度,进而比较图像本身的相似程度。
- Opencv提供的比较方法有四种
- Correlation 相关性比较 -(计算结果范围为 -1到1 -1很不相关,1完全一样 )
- Chi-Square 卡方比较 -(计算结果越接近0,两个直方图越相似)
- Intersection 十字交叉性 -(计算公式为取两个直方图每个相同位置的值的最小值,然后求和,这个比较方式不是很好,不建议使用)
- Bhattacharyya distance 巴氏距离 - (比较结果是很准的,计算结果范围为 0-1 ,0表示两个直方图非常相关,1最不相似)
二、相关性计算(CV_COMP_CORREL)
三、卡方计算(CV_COMP_CHISQR)
四、十字计算(CV_COMP_INTERSECT)
五、巴氏距离计算(CV_COMP_BHATTACHARYYA )
六、步骤
- 首先把图像从RGB色彩空间转换到HSV色彩空间 cvtColor
- 计算图像的直方图,然后归一化到[0~1]之间calcHist和normalize;
- 使用上述四种比较方法之一进行比较compareHist
compareHist(
InputArray h1,
InputArray H2,
int method
)
七、示例
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace cv;
string convertToString(double d);
int main(int argc, char** argv) {
Mat base, test1, test2;
Mat hsvbase, hsvtest1, hsvtest2;
base = imread("images/14.png");
if (!base.data) {
printf("could not load image...\n");
return -</