opencv:图像直方图相似性比较

void hist_compare(Mat src1, Mat src2) {
    int histSize[] = { 256, 256, 256 };
    int channels[] = { 0, 1, 2 };
    Mat hist1, hist2;
    float c1[] = { 0, 255 };
    float c2[] = { 0, 255 };
    float c3[] = { 0, 255 };
    const float* histRanges[] = { c1, c2, c3 };
    calcHist(&src1, 1, channels, Mat(), hist1, 3, histSize, histRanges, true, false);
    calcHist(&src2, 1, channels, Mat(), hist2, 3, histSize, histRanges, true, false);

    // 归一化
    normalize(hist1, hist1, 0, 1.0, NORM_MINMAX, -1, Mat());
    normalize(hist2, hist2, 0, 1.0, NORM_MINMAX, -1, Mat());

    // 比较 - 巴氏距离
    double h12_bhattacharyya = compareHist(hist1, hist2, HISTCMP_BHATTACHARYYA);
    double h11_bhattacharyya = compareHist(hist1, hist1, HISTCMP_BHATTACHARYYA);

    // 比较 - 相关性比较
    double h12_correl = compareHist(hist1, hist2, HISTCMP_CORREL);
    double h11_correl = compareHist(hist1, hist1, HISTCMP_CORREL);

    printf("巴氏距离: h12 = %.2f\th11 = %.2f\n", h12_bhattacharyya, h11_bhattacharyya);
    printf("相关性: h12 = %.2f\th11 = %.2f\n", h12_correl, h11_correl);
}

原文地址:https://www.cnblogs.com/wbyixx/p/12246926.html

时间: 2024-07-31 16:13:04

opencv:图像直方图相似性比较的相关文章

opencv图像直方图均衡化及其原理

直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均衡化作用:用来增强对比度. 这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好地在直方图上分布.这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能. 这种方法对于背景和前景都太亮或者太

OpenCV成长之路:图像直方图的应用

2014-04-11 13:57:03 标签:opencv 图像 直方图 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ronny.blog.51cto.com/8801997/1394118 正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射. 我们以人脸检测举例,在人脸检测中,我们第一步往往需要先提取图像中皮肤区域来缩小人脸的检

OpenCV入门教程之五 图像直方图的应用

正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射 我们以人脸检测举例,在人脸检测中,我们第一步往往需要先提取图像中皮肤区域来缩小人脸的检测范围,这一般获得皮肤的颜色范围还需要定义阈值并不断的调整,实际中参数太多而不容易控制. 这里我们就可以考虑用直方图的反射映射. 1,收集人脸皮肤样本. 2,拼合样本并计算其颜色直方图. 3,将得到的样本颜色直方图反射映射到待检测的图片中,然后进行阈值化即可. 这里为

opencv python:图像直方图 histogram

直接用matplotlib画出直方图 def plot_demo(image): plt.hist(image.ravel(), 256, [0, 256]) # image.ravel()将图像展开,256为bins数量,[0, 256]为范围 plt.show() 图像直方图 def image_hist(image): color = ('blue', 'green', 'red') for i, color in enumerate(color): # 计算出直方图,calcHist(i

图像直方图均衡化增强opencv与C语言版

本文实现彩色图像的全局直方图均衡.分别对R/G/B三通道均衡,读写图片采用OpenCV.代码如下: #include <opencv2/opencv.hpp> //#include <cv.h> //#include <cxcore.h> //#include <highgui.h> #include <time.h> #include <stdio.h> #include <math.h> #include "

OpenCV成长之路:图像直方图

http://ronny.blog.51cto.com/8801997/1394115 2014-04-11 13:47:27 标签:opencv 直方图 统计表 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ronny.blog.51cto.com/8801997/1394115 一.图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种

OpenCV入门教程之四 图像直方图

一.图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比. 图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征.在实际工程中,图像直方图在特征提取.图像匹配等方面都有很好的应用.  二.利用OpenCV计算图像的直方图 OpenCV中计算图像直方图像函数是calcHist,它的参数比较多,下面分析一下它的接口和用法. void calc

【计算机视觉】OpenCV中直方图处理函数简述

计算直方图calcHist 直方图是对数据集合的统计 ,并将统计结果分布于一系列预定义的bins中.这里的数据不仅仅指的是灰度值 ,统计数据可能是任何能有效描述图像的特征. 假设有一个矩阵包含一张图像的信息 (灰度值 0-255): gray 既然已知数字的范围包含256个值, 我们可以将这个范围分割成子区域(称作 bins),如: bins 然后再统计掉入每一个bin_{i}的像素数目.采用这一方法来统计上面的数字矩阵,我们可以得到下图( x轴表示 bin, y轴表示各个bin中的像素个数).

【OpenCV】直方图

今天写直方图,学了几个相关函数 1. mixChannels void mixChannels(const Mat* src, int nsrc, Mat* dst, int ndst, const int* fromTo, size_t npairs) 功能: 把 src 中指定的若干通道 复制到 dst中 src: 输入图像, 可以多张 nsrc: 有多少张输入图像 dst: 输出图像,可以多张 ndst: 有多少张输出图像 fromTo: {0 , 1, 1, 2, 2, 0} 这样偶数个