【发布时间】: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