【问题标题】:How to insert array of <int> into CvArr in OpenCV如何在 OpenCV 中将 <int> 数组插入 CvArr
【发布时间】:2012-08-08 11:35:06
【问题描述】:

我正在尝试在 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 知识...有人可以帮我解决这个问题吗?!

P.S:顺便说一句,我知道在这种方法中可以使用 iplImage 代替 CvArr,但问题仍然存在:如何将 &lt;int&gt; 的数组插入 iplImage ?!

【问题讨论】:

    标签: opencv face-recognition javacv


    【解决方案1】:
    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);
    ......
    

    【讨论】:

    • 这行得通吗?它看起来很简单,但我永远无法弄清楚。只是好奇,因为它没有被勾选为正确答案
    【解决方案2】:

    从我刚刚读到的here,您需要使用指针,所以这样应该可以工作:

    //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);
    

    【讨论】:

    • 一个问题...您在代码中到底在哪里使用了“iPoint”?!不应该是 'iPoint.put(i)' 而不是 'i.put(i)' 吗?!最后一行不应该更像 'CvArr labelsCV = new CvArr (iPoint)' 吗?!
    • 是的,它可能应该,我的错。匆匆忙忙写了这篇。但是我最近尝试了这个并且无法使其工作。你需要fisherface算法吗? eigenface会做吗?如果是这样,您可以查看javacv.googlecode.com/git-history/… 我最近将其转换为 android 的实时人脸识别器
    • 两者都行!我会看看它(在空闲时间)并检查我是否也可以运行它......
    • 如果你使用 git,我的 repo 是公开的,它使用 facerecognition.java,这可能会有一些用处:github.com/danieljonker/PersonFinder.git 不确定你是否需要更多来检查项目。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多