0

我正在尝试在 Android 上开发人脸识别应用程序,并且我正在使用 JavaCV+OpenCV 2.4.2 来使用 Philipp Wagner 的人脸识别类。

该类有一个训练方法,它接受 Mat 和 Integer 数组作为输入(在 C++ 中):

vector<Mat> images;
vector<int> labels;

Ptr<FaceRecognizer> model = createFisherFaceRecognizer();
model->train(images, labels);

JavaCV 接受 'train' 方法的属性,因为train(MatVector arg0, CvArr arg1)这里是我卡住的地方!

我在尝试将数据加载到 CvArr 时遇到了一些麻烦......我已经将标签作为数据字符串......但我似乎找不到将这些标签作为数组插入 CvArr 的方法......让我们称之为缺乏 OpenCV 知识......有人可以帮我解决这个问题吗?!

PS:顺便说一句,我知道在这种方法中可以使用 iplImage 代替 CvArr 但问题仍然存在:如何将 Array of<int>插入 iplImage ?!

4

2 回答 2

2
MatVector images = new MatVector(numberOfImages);
CvMat labels= cvCreateMat(1,numberOfImages,CV_32SC1);

images.put(0, cvLoadImage("D:/att_faces/test/p1/1.pgm"));
labels.put(0,0);

images.put(1, cvLoadImage("D:/att_faces/test/p1/2.pgm"));
labels.put(1,0);

images.put(2, cvLoadImage("D:/att_faces/test/p2/1.pgm"));
labels.put(2,1);

images.put(3, cvLoadImage("D:/att_faces/test/p2/2.pgm"));
labels.put(3,1);

......
FaceRecognizerPtr model = createEigenFaceRecognizer(0,1000);
model.get().train(images, labels);
......
于 2012-10-19T07:26:32.563 回答
0

从我刚刚在这里读到的内容中,您需要使用指针,这样应该可以工作:

//Total number of faces in database
final int numberOfImages = 20;

Integer[] labels = new Integer[numberOfImages];
//add integers to array
...

IntPointer iPoint = new IntPointer();

for (Integer i : labels) {
     i.put(i)
}

CVArr labelsCV = new CvArr(i);
于 2012-09-20T04:36:28.760 回答