gpt4 book ai didi

android - JNI编码和使用JNI连接到java的c/c编码之间的区别

转载 作者:太空狗 更新时间:2023-10-29 13:33:23 25 4
gpt4 key购买 nike

我正在 android 上使用 opencv 做一个项目。我正在用 C++ 编码,但想在 Android 智能手机上实现该程序。我不想仅仅因为 android 在 java 中就将 c++ 代码转换为 java,所以我要使用 JNI。在我的研究中,我遇到过真正使用 JNI 编码风格的代码,但我无法理解如何将我的 C++ 代码转换为 JNI 代码。我发现在 android opencv 示例的教程 4 中,它只使用了 c++ 代码,这与教程 3 不同。那么这两者之间到底有什么区别呢?我想知道 JNI 编码风格是否会给我更快的性能。截至目前,我只能使用 C++ 并将其与 Java 集成,但应用程序崩溃了。

来自android opencv教程3:

JNIEXPORT void JNICALL
Java_org_opencv_samples_tutorial3_Sample3View_FindFeatures(JNIEnv* env, jobject,
jint width, jint height, jbyteArray yuv, jintArray bgra)
{
jbyte* _yuv = env->GetByteArrayElements(yuv, 0);
jint* _bgra = env->GetIntArrayElements(bgra, 0);

Mat myuv(height + height/2, width, CV_8UC1, (unsigned char *)_yuv);
Mat mbgra(height, width, CV_8UC4, (unsigned char *)_bgra);
Mat mgray(height, width, CV_8UC1, (unsigned char *)_yuv);

cvtColor(myuv, mbgra, CV_YUV420sp2BGR, 4);

vector<KeyPoint> v;

FastFeatureDetector detector(50);
detector.detect(mgray, v);
for( size_t i = 0; i < v.size(); i++ )
circle(mbgra, Point(v[i].pt.x, v[i].pt.y), 10, Scalar(0,0,255,255));

env->ReleaseIntArrayElements(bgra, _bgra, 0);
env->ReleaseByteArrayElements(yuv, _yuv, 0);
}

来自android opencv教程4:

JNIEXPORT void JNICALL
Java_org_opencv_samples_tutorial4_Sample4View_FindFeatures(JNIEnv*, jobject, jlong
addrGray, jlong addrRgba)
{
Mat* pMatGr=(Mat*)addrGray;
Mat* pMatRgb=(Mat*)addrRgba;
vector<KeyPoint> v;

FastFeatureDetector detector(50);
detector.detect(*pMatGr, v);
for( size_t i = 0; i < v.size(); i++ )
circle(*pMatRgb, Point(v[i].pt.x, v[i].pt.y), 10, Scalar(255,0,0,255));
}

最佳答案

您可以使用 Android NDK 使用 c/c++ 构建 android 应用程序

看这里 Can I do Android Programming in C++, C?

关于android - JNI编码和使用JNI连接到java的c/c编码之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com