[英]OpenCV Android using entirely in c++
我注意到github中的大多數Android示例在Java中都使用了opencv。 我現在在iOS中有一個可運行的應用程序,我盡力將opencv調用與橋接頭分開。
在Android中有可能做同樣的事情嗎? 我注意到像這里的CascadeClassifier這樣的opencv檢測器都是用Java而不是c ++編寫的。
我可以在Android中取得與iOS一樣的效果嗎?
您可以完全在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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.