如何使用OpenCV3直方图方法进行人脸相似度对比

时间:2024-10-12 18:44:58

1、确定人脸图像保存的路径,在接下来过程中程序读取这些图片进行人脸相似度对比图像库保存路劲:f:\mm\1

如何使用OpenCV3直方图方法进行人脸相似度对比

2、使用直方图方法计算人脸图像相似度,主要实现思路:1)从本地读取两张人脸图像2)将需要对比的图像进行HSV格式转换3)构建图像的直方图模型,并进行直方图归一化4)比较两张图片的直方图模型,计算图片的直方图相似度5)判断相似度值,如果大于0.85左右我们可以认为两只人脸图片比较相似的

如何使用OpenCV3直方图方法进行人脸相似度对比

3、采用直方图方法进行人脸相似度的代码:#inclu蟠校盯昂de <opencv2/opencv.hpp>垆杪屑丝#include <opencv2/core.hpp>#include <opencv2/imgproc.hpp>#include <opencv2/highgui.hpp>#include <iostream>#include <string>#include <stdlib.h>using namespace std;using namespace cv;//直方图比对bool compareFacesByHist(M$at $img,$Mat $orgImg){Mat $tmpImg; resize(img, tmpImg, Size(orgImg.cols, orgImg.rows)); imshow("Img1", img); imshow("tmpImg", tmpImg); imshow("orgImg", orgImg); //HSV颜色特征模型(色调H,饱和度S,亮度V) cvtColor(tmpImg, tmpImg, COLOR_BGR2HSV); cvtColor(orgImg, orgImg, COLOR_BGR2HSV); //直方图尺寸设置 //一个灰度值可以设定一个bins,256个灰度值就可以设定256个bins //对应HSV格式,构建二维直方图 //每个维度的直方图灰度值划分为256块进行统计,也可以使用其他值 int hBins = 256, sBins = 256; int histSize[] = { hBins,sBins }; //H:0~180, S:0~255,V:0~255 //H色调取值范围 float hRanges[] = { 0,180 }; //S饱和度取值范围 float sRanges[] = { 0,255 }; const float* ranges[] = { hRanges,sRanges }; int channels[] = { 0,1 };//二维直方图 MatND hist1, hist2; calcHist(&tmpImg, 1, channels, Mat(), hist1,2,histSize, ranges, true, false); normalize(hist1, hist1, 0, 1, NORM_MINMAX, -1, Mat()); calcHist(&orgImg, 1, channels, Mat(), hist2, 2, histSize, ranges, true, false); normalize(hist2, hist2, 0, 1, NORM_MINMAX, -1, Mat()); double similarityValue = compareHist(hist1, hist2, CV_COMP_CORREL); cout << "相似度:" << similarityValue << endl; if (similarityValue >= 0.85) { return true; } return false;}int main(){Mat orgImg = imread("F:\\mm\\1\\img0.jpg"); Mat img = imread("F:\\mm\\1\\img-1.jpg"); compareFacesByHist(img, orgImg); waitKey(0); return 0;}

如何使用OpenCV3直方图方法进行人脸相似度对比

4、选择两张相似的人脸进行相似度比对测试修改main函数中的载入图像文件:Mat orgImg = imread("F:\\mm\\1\\img-4.jpg");Mat img = imread("F:\\mm\\1\\img-1.jpg");运行程序输出:相似度:0.805062

如何使用OpenCV3直方图方法进行人脸相似度对比

5、选择两张不同的人脸进行相似度比对测试修改main函数中的载入图像文件:Mat orgImg = imread("F:\\mm\\1\\img0.jpg");Mat img = imread("F:\\mm\\1\\img-1.jpg");运行程序输出:相似度:0.173482

如何使用OpenCV3直方图方法进行人脸相似度对比

6、选择两张相似的人脸,但色彩的和关照度不一样的进行相似度比对测试修改main函数中的载入图像文件:Mat orgImg = imread("F:\\mm\\1\\im爿讥旌护g-1.jpg");Mat img = imread("F:\\mm\\1\\img-8.jpg");运行程序输出:相似度:0.301016从这个测试样例中可以发现,使用直方图的方法进行相似度对比的准确度并不高,应用场景有限。

如何使用OpenCV3直方图方法进行人脸相似度对比
© 手抄报圈