如何在OpenCV中获得最相似的特征面或鱼面?
我试图找到两张脸相似性的度量。我使用OpenCV。为此,我用1000张不同人物的1000张照片(每个人1张照片)来训练特征脸/鱼脸。所以我在训练集中也有1000个标签 现在我可以使用预测方法得到最相似的脸 我想输入两张未知的人脸图像,看看它们是否与训练集中的同一个人脸向量相似 以下是openCV的代码,它返回最相似的标签(距离最小)如何在OpenCV中获得最相似的特征面或鱼面?,opencv,similarity,face-recognition,Opencv,Similarity,Face Recognition,我试图找到两张脸相似性的度量。我使用OpenCV。为此,我用1000张不同人物的1000张照片(每个人1张照片)来训练特征脸/鱼脸。所以我在训练集中也有1000个标签 现在我可以使用预测方法得到最相似的脸 我想输入两张未知的人脸图像,看看它们是否与训练集中的同一个人脸向量相似 以下是openCV的代码,它返回最相似的标签(距离最小) for(size\t sampleIdx=0;sampleIdx
for(size\t sampleIdx=0;sampleIdx<\u projections.size();sampleIdx++){
双距离=范数(_投影[sampleIdx],q,范数_L2);
如果((距离
问题:
CheersQ1::由于OpenCV不提供默认函数,因此您必须通过创建具有距离和标签的向量来创建自己的函数。您可以按如下所示编写自己的函数,并将距离和标签存储在向量中。在这里,您需要重建OpenCV
virtual void predict(InputArray src, int &label, double &confidence, Vector <variable>) const = 0;
virtualvoid predict(输入数组src、int和label、双精度和置信度、向量)const=0;
下面是我做的。注意我在Perl上很好,C++中的NeWB(实际上这是我的第一个C++项目!)所以我把很多东西输出到命令行,用Perl。
我和您一样访问了facerec.cpp,并将for循环的内容更改为:
for(size_t sampleIdx = 0; sampleIdx < _projections.size(); sampleIdx++) {
double dist = norm(_projections[sampleIdx], q, NORM_L2);
int labelClass = _labels.at<int>((int)sampleIdx);
cout << dist << " " << labelClass << endl;
if((dist < minDist) && (dist < _threshold)) {
minDist = dist;
minClass = _labels.at<int>((int)sampleIdx);
}
}
for(size\t sampleIdx=0;sampleIdx<\u projections.size();sampleIdx++){
双距离=范数(_投影[sampleIdx],q,范数_L2);
int labelClass=_labels.at((int)sampleIdx);
cout::Q2:不同的主题/人有不同的标签。因此,1000个标签是正确的。
for(size_t sampleIdx = 0; sampleIdx < _projections.size(); sampleIdx++) {
double dist = norm(_projections[sampleIdx], q, NORM_L2);
int labelClass = _labels.at<int>((int)sampleIdx);
cout << dist << " " << labelClass << endl;
if((dist < minDist) && (dist < _threshold)) {
minDist = dist;
minClass = _labels.at<int>((int)sampleIdx);
}
}
#include <iostream>
using namespace std;