【问题标题】:Android NDK passing parameters to native methodsAndroid NDK 将参数传递给原生方法
【发布时间】:2013-08-03 12:51:38
【问题描述】:

我正在研究OpenCV4Android SDK,2.4.5版本,带有NDK框架,使用它我可以在Android环境中使用本机代码(用C/C++编写)。但我并不完全了解参数是如何从 Android 传递到 C 的。

例如,在'mixedprocessing'示例中,在'jni'目录中有一个名为'jni_part'的.cpp文件,其代码为:

#include <jni.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <vector>

using namespace std;
using namespace cv;

extern "C" {

  JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba);

  JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba) {
    Mat& mGr  = *(Mat*)addrGray;
    Mat& mRgb = *(Mat*)addrRgba;
    vector<KeyPoint> v;

    FastFeatureDetector detector(50);
    detector.detect(mGr, v);
    for( unsigned int i = 0; i < v.size(); i++ ) {
      const KeyPoint& kp = v[i];
      circle(mRgb, Point(kp.pt.x, kp.pt.y), 10, Scalar(255,0,0,255));
    }
  }

}

在 MainActivity 中有方法:

 public native void FindFeatures(long matAddrGr, long matAddrRgba);

所以它作为参数传递了一个 Mat 对象的本机地址,但是它如何成为 C 中的矩阵? 以及从 FastFeatureDetector 对象中检测到哪些特征?

【问题讨论】:

    标签: android opencv android-ndk


    【解决方案1】:

    FindFeatures,在 Java 中,在 C/C++ 中调用它的完全等价物:

    JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba){
    Mat& mGr  = *(Mat*)addrGray;
    Mat& mRgb = *(Mat*)addrRgba;
    ...
    

    这就是它变成cv::Mat 的地方。 (Mat*) 将地址 addrGray(分别为 addrRgba)指向的内容转换为“指向 cv::Mat 的指针”。然后,将这个新创建的指针指向的值放入mGr(分别为mRgb),也就是cv::Mat

    换句话说,你只给 C/C++ 一个内存中的地址,你必须确保实际存在的是一个有效的cv::Mat


    关于您的第二个问题,FAST 检测器检测图像中的兴趣点(即包含大量信息的点)。这个想法是能够识别多个不同图像上的这些点。为简化起见,您可以将 FAST 检测到的特征视为图像中的角点。

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2011-07-23
      • 2017-01-05
      • 2013-10-04
      • 2013-05-19
      相关资源
      最近更新 更多