1,比较方法:
相关性值越大,越相似,其他方法,值越小,越相似。
2,函数说明:
CV_EXPORTS_W double compareHist( InputArray H1, InputArray H2, int method );
PS : 通过 method 选择需要进行比较的方法
通过读取两张RGB彩色图像,然后对每张图像进行三通道图像直方图统计,最后进行两张图像的直方图相似性比较,选择了相关性和巴氏距离分别进行比较
void hist_compare() {
Mat src1 = imread("F:/code/images/face_01.png");
Mat src2 = imread("F:/code/images/face_02.png");
imshow("src1", src1);
imshow("src2", src2);
//计算三通道直方图(不用通道分离,而设置多通道参数)
Mat hist1, hist2;
int histSize[] = { 256, 256, 256 };
int channels[] = { 0, 1, 2 };
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, NORM_MINMAX, -1, Mat());
normalize(hist2, hist2, 0, 1, NORM_MINMAX, -1, Mat());
//比较(巴氏距离)
double bs_h12 = compareHist(hist1, hist2, HISTCMP_BHATTACHARYYA);
double bs_h11 = compareHist(hist1, hist1, HISTCMP_BHATTACHARYYA);
printf("bs_h12:%.2f, bs_h11:%.2f\n", bs_h12, bs_h11);
//比较(相关性)
double co_h12 = compareHist(hist1, hist2, HISTCMP_CORREL);
double co_h11 = compareHist(hist1, hist1, HISTCMP_CORREL);
printf("co_h12:%.2f, co_h11:%.2f\n", co_h12, co_h11);
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/182015.html