【问题标题】:OpenCV Android using entirely in c++OpenCV Android 完全在 C++ 中使用
【发布时间】:2017-05-24 02:29:15
【问题描述】:

我注意到 github 中的大多数 Android 示例都使用 java 中的 opencv。我现在在 iOS 中有一个工作应用程序,我尽力将 opencv 调用与桥接头分开。

在android中可以做同样的事情吗?我注意到像 CascadeClassifier here 这样的 opencv 检测器都在 java 中,而不是在 c++ 中。

我可以在 Android 中实现与 iOS 相同的功能吗?

【问题讨论】:

    标签: java android c++ ios opencv


    【解决方案1】:

    完全可以在C++中使用,必须使用JNI才能让java代码调用native代码。

    下载 Opencv-android-sdk 后,您只能导入您需要的头文件和“.a”文件。 java 文件是可选的,提供给不懂 C++ 的人。
    比如java类CascadeClassifier,最后调用native函数,你也可以这样,其实就是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);
    

    【讨论】:

      猜你喜欢
      • 2015-08-24
      • 2011-10-04
      • 1970-01-01
      • 2019-12-10
      • 2013-08-25
      • 2012-08-22
      • 1970-01-01
      • 2013-06-21
      • 2017-12-30
      相关资源
      最近更新 更多