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

OpenCV forAndroidはC++関数に基づいているため、C ++ / Python <---> Android/Java間の関係を見つけることができます。

ここでAndroid/Java関数を参照することもできます。

また、一部のものは非推奨になっている可能性があり、CvHaardetectobjectsはそれらの1つのように見えます。C ++:CascadeClassifier :: detectMultiScaleまたは Java:CascadeClassifier.detectMultiScaleに置き換えられたようです。

于 2013-02-16T12:15:33.133 に答える
0

Android 用の OpenCV をインストールしている場合は、目的に使用する Java クラスとメソッドがあります。本当に C++ オブジェクトを使用したい場合は、NDK で開発する必要があります...

しかし、あなたの場合、実際には CvHaardetectobjectsAndroid用のOpenCvにJavaはありません。ただし、この場合、HaarCascade を にロードできます。その後、HaarCascade に基づいて検出を実行するためにCascadeClassifier使用できます。detectMultiScale

と同じ結果が得られます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 に答える