2017-05-24 15 views
0

githubのAndroidの例のほとんどがjavaのopencvを使用していることに気付きました。私は今iOSで働いているアプリケーションを持っており、opencvコールをブリッジヘッダーから分離するために最善を尽くしました。OpenCV Androidで完全にC++を使用

アンドロイドでも同じことが可能ですか?私は、CascadeClassifier hereのようなopencv検出器はすべてJavaであり、C++ではないことに気づいた。

iOSのようにAndroidで同じことを達成できますか?

答えて

1

完全にC++で使用することができます.JNIを使​​用して、Javaコードからネイティブコードを呼び出さなければなりません。

Opencv-android-sdkをダウンロードしたら、必要なヘッダファイルと ".a"ファイルのみをインポートできます。 javaファイルはオプションで、C++を知らない人に提供されます。
は例えば、JavaクラスCascadeClassifierは、最終的にはネイティブ関数を呼び出します。また、このように、実際には、それがJNIだと行うことができます。

// C++: CascadeClassifier::CascadeClassifier() 
private static native long CascadeClassifier_0(); 

// C++: CascadeClassifier::CascadeClassifier(string filename) 
private static native long CascadeClassifier_1(String filename); 

// C++: void CascadeClassifier::detectMultiScale(Mat image, vector_Rect& objects, double scaleFactor = 1.1, int minNeighbors = 3, int flags = 0, Size minSize = Size(), Size maxSize = Size()) 
private static native void detectMultiScale_0(long nativeObj, long image_nativeObj, long objects_mat_nativeObj, double scaleFactor, int minNeighbors, int flags, double minSize_width, double minSize_height, double maxSize_width, double maxSize_height); 
private static native void detectMultiScale_1(long nativeObj, long image_nativeObj, long objects_mat_nativeObj); 

// C++: void CascadeClassifier::detectMultiScale(Mat image, vector_Rect& objects, vector_int rejectLevels, vector_double levelWeights, double scaleFactor = 1.1, int minNeighbors = 3, int flags = 0, Size minSize = Size(), Size maxSize = Size(), bool outputRejectLevels = false) 
private static native void detectMultiScale_2(long nativeObj, long image_nativeObj, long objects_mat_nativeObj, long rejectLevels_mat_nativeObj, long levelWeights_mat_nativeObj, double scaleFactor, int minNeighbors, int flags, double minSize_width, double minSize_height, double maxSize_width, double maxSize_height, boolean outputRejectLevels); 
private static native void detectMultiScale_3(long nativeObj, long image_nativeObj, long objects_mat_nativeObj, long rejectLevels_mat_nativeObj, long levelWeights_mat_nativeObj); 

// C++: bool CascadeClassifier::empty() 
private static native boolean empty_0(long nativeObj); 

// C++: bool CascadeClassifier::load(string filename) 
private static native boolean load_0(long nativeObj, String filename); 

// native support for java finalize() 
private static native void delete(long nativeObj);