0

私は Android で顔認識アプリを開発しようとしています。JavaCV+OpenCV 2.4.2 を使用して Philipp Wagner の顔認識クラスを使用しています。

このクラスには、Mat と Integer の配列を入力として受け入れる Train Method があります (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: ところで、このメソッドで CvArr の代わりに iplImage を使用できることはわかっていますが、問題はまだ残っています:<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 に答える