0

我已经下载了用于 Android 开发的 opencv2.4.2 Android SDK。我需要将一些 Opencv“C”代码转换为 android-opencv。但我可以在 android-opencv 中找到任何“C”函数。我只能在 Android opencv 中看到“CPP”功能。

例如,"detectmultiscale"图书馆有没有,但我找不到"CvHaardetectobjects". 此外,我找不到任何以"Cv".

当我使用“C”函数时,如果我在 Android-opencv 中也有相同的函数会很好。在android opencv中是否有可能获得或只有我们有CPP方法。?

4

2 回答 2

0

好的,如果您已经为 Android 安装了 OpenCV,那么您有 Java 类和方法可用于您的目的;如果你真的想使用 C++ 对象,你必须去在 NDK 中开发......

但是在您的情况下,确实 CvHaardetectobjects在 OpenCv 上没有 Java for android;但在这种情况下,您可以将 HaarCascade 加载到 aCascadeClassifier中,然后您可以使用它detectMultiScale来执行基于 HaarCascade 的检测。

你得到相同的结果CvHaardetectobjects

请看下面的代码:

/////////////Load the HaarCascade file into the clsssifier 
try {
        InputStream is3 = getResources().openRawResource(R.raw.haarcascade_mcs_mouth);
        File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
        File mCascadeFile = new File(cascadeDir, "haarcascade_mcs_mouth.xml");
        FileOutputStream os3 = new FileOutputStream(mCascadeFile);

        byte[] buffer = new byte[4096];
        int bytesRead;
        Log.e("","Non c'è problema PRIMA della lettura del file");
        while ((bytesRead = is3.read(buffer)) != -1) {
        os3.write(buffer, 0, bytesRead);
        }
        is3.close();
        os3.close();
        Log.e("","Non c'è problema con la lettura del file");
        mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath());
        if (mJavaDetector.empty()) {
        Log.e(TAG, "Failed to load cascade classifier");
        mJavaDetector = null;
        } else
        Log.e(TAG, "Loaded cascade classifier from " + mCascadeFile.getAbsolutePath());


        } catch (IOException e) {
        e.printStackTrace();
        Log.e(TAG, "Failed to load cascade. Exception thrown: " + e);
        }
    //////Call detectMultiScale with the Detector that contains the cascade     
        mJavaDetector.detectMultiScale(mat,MapofRect,1.15,4,0,new Size(25,15),new Size(face.width(),face.height()/2));
于 2013-02-16T11:01:52.260 回答
0

OpenCV for Android 是基于 C++ 函数的,所以你会更好地找到 C++/Python <---> Android/Java 之间的关系。

您还可以在此处浏览 Android/Java 功能。

此外,有些东西可能已被弃用,而 CvHaardetectobjects 看起来就是其中之一。它似乎已被C++: CascadeClassifier::detectMultiScaleJava: CascadeClassifier.detectMultiScale 取代

于 2013-02-16T12:15:33.133 回答