如果我们尝试使用opencv
ndk创建应用程序,是否必须在Android设备上安装opencv manager?有没有其他选择,以便不必安装opencv管理器,因为如果客户需要在我们的应用程序中安装opencv管理器,它看起来很奇怪。
答案 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,并确保你的客户得到正确的。
所以,这是可能的,但不是推荐的方法。