zoukankan      html  css  js  c++  java
  • 直方图比较

    通过比较两幅图像的灰度直方图来确定相似性

    一共四种方法

    第一种:相关性比较

     值的范围是-1~1相关性由小到大

    第二种:卡方计算

     越小表示相关性越强

    第三种:十字交叉运算

    第四种:巴氏距离计算

    取值范围0~1,距离越小相关性越强

    运算之前先要把rgb转化为hsv,然后将像素值归一化到0~1之间

    #include<iostream>
    #include<opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char**argv)
    {
        Mat  base,test1,test2;
        base=imread("C:/Users/hs769/Desktop/1.jpg");
        test1 = imread("C:/Users/hs769/Desktop/2.jpg");
        imshow("demo", base);
    
        //cvtColor(base, test1, COLOR_RGB2GRAY);
        cvtColor(test1, test1, COLOR_RGB2HSV);
        cvtColor(base, test2, COLOR_RGB2HSV);
    
        int h_bin = 50;
        int s_bin = 60;
        int histSize[] = { h_bin,s_bin };
        float h_range[] = { 0,180 };
        float s_range[] = { 0,256 };
    
        const float *range[] = { h_range,s_range };
    
        int channels[] = { 0,1 };
        MatND hist_test1;
        MatND hist_test2;
    
    
        calcHist(&test1, 1, channels, Mat(), hist_test1, 2, histSize, range, true, false);
        normalize(hist_test1, hist_test1, 0, 1, NORM_MINMAX, -1, Mat());
    
        calcHist(&test2, 1, channels, Mat(), hist_test2, 2, histSize, range, true, false);
        normalize(hist_test2, hist_test2, 0, 1, NORM_MINMAX, -1, Mat());
    
        double test1test2 = compareHist(hist_test1, hist_test2, HISTCMP_CORREL);
        cout << "method1 value" << test1test2 << endl;
    
        waitKey(0);
        return 0;
    }

  • 相关阅读:
    配置Mysql远程访问
    mysql Access denied for user root@localhost错误处理备忘
    MsSql判断表是否有自增标识
    .net用NPOI生成Word表格
    TensorFlow-卷积
    Java中int与Integer的区别
    由经纬度坐标得到腾讯地图的瓦片/切片行列号
    vs code上配置Scala
    VMware虚拟机上配置CentOS联网
    使用PuTTy在CentOS下安装web.py与简单的文件传输
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/13303081.html
Copyright © 2011-2022 走看看