opencv经理是否必须安装?

时间:2014-07-25 12:26:34

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

如果我们尝试使用opencv ndk创建应用程序,是否必须在Android设备上安装opencv manager?有没有其他选择,以便不必安装opencv管理器,因为如果客户需要在我们的应用程序中安装opencv管理器,它看起来很奇怪。

2 个答案:

答案 0 :(得分:1)

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

Java中的代码

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

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

在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 Manager。您所要做的就是确保makefile与opencv.mk具有正确的链接。

答案 1 :(得分:0)

您可以拨打initDebug并静态拨打'链接你的opencv库,但有缺点,你现在必须提供你的不同版本的apk,并确保你的客户得到正确的。

所以,这是可能的,但不是推荐的方法。