android - opencv manager 是强制安装的吗?

标签 android opencv android-ndk java-native-interface

如果我们尝试使用 opencv ndk 制作应用程序,是否必须在 android 设备上安装 opencv 管理器?是否有任何替代方案,这样就不必安装 opencv 管理器,因为如果客户也需要在我们的应用程序中安装 opencv 管理器,这看起来很奇怪。

最佳答案

如果您使用 OpenCV NDK 完成完整的图像处理部分(这很有可能),则不需要 OpenCV 管理器。来自相机预览的数据可以传递给用 native C/C++ 编写的函数。在那里你可以转换为 BGR/BGRA。其概要如下所示。

Java 代码

public native void jniPart(int width, int height, byte[] data);

其中 widthheight 是图像/相机预览的宽度和高度。我在这里假设您正在处理来自相机的帧。在这种情况下,您可以传递来自相机的字节数组形式的数据。

在 C/C++ 代码中,您可以使用以下代码段将相机数据转换为 BGR。请注意,大多数 Android 操作系统中的默认相机图像格式是 NV21,但您可以更改它。

C/C++ 代码

JNIEXPORT jstring JNICALL Java_com_example_AppName_ClassName_jniPart  (JNIEnv* env, jobject j_this,jint width, jint height, jbyteArray yuvdata){

.
.
jbyte* _yuv  = env->GetByteArrayElements(yuv, 0);
Mat nv21img(height + height/2, width, CV_8UC1, (unsigned char *)_yuv); 
Mat matImg(height, width, CV_8UC3) ;
cvtColor(nv21img,matImg,CV_YUV2BGR_NV21, 4);
.
}

您现在可以使用 matImg 进行处理。在这种情况下可以避免集成 opencv 管理器。您所要做的就是确保 makefile 具有指向 opencv.mk 的正确链接。

关于android - opencv manager 是强制安装的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955822/

相关文章:

android - 如何修复 "Failed to sync vcpu reg"错误?

c++ - 在 SURF 中使用欧氏距离

android-ndk - 使用 Android NDK 编译基于 Automake(配置)的项目

c++ - 从 C++ 输出流到 Android TextView 或等效的适配器?

android - 是否有用于存储静态 map 的 Android 实用程序?

android - 低功耗蓝牙通知是否唤醒 CPU?

android - 如何最好地应对不同版本的Android?

c++ - 如何强制 approxPolyDP() 只返回最好的 4 个角? - Opencv 2.4.2

opencv - 使用 OpenCV 计算 Jade 米树

Android - 集成 ffmpeg 和 android-ndk-r9c