Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否必须安装opencv管理器?_Android_Opencv_Android Ndk_Java Native Interface - Fatal编程技术网

Android 是否必须安装opencv管理器?

Android 是否必须安装opencv管理器?,android,opencv,android-ndk,java-native-interface,Android,Opencv,Android Ndk,Java Native Interface,如果我们试图使用opencvndk制作应用程序,是否必须在android设备上安装opencv管理器?是否有任何替代方案,以便用户不必安装opencv manager,因为如果客户也需要在我们的应用程序中安装opencv manager,这看起来很奇怪。您可以调用opencv库并“静态”链接,但这带来了一个缺点,即您现在必须提供不同版本的apk,并确保您的客户得到正确的服务 因此,这是可能的,但不是推荐的方法。如果您使用OpenCV NDK完成完整的图像处理部分(这是完全可能的),则不需要Ope

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

您可以调用opencv库并“静态”链接,但这带来了一个缺点,即您现在必须提供不同版本的apk,并确保您的客户得到正确的服务


因此,这是可能的,但不是推荐的方法。

如果您使用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管理器。您所要做的就是确保makefile具有指向opencv.mk的正确链接

berak我静态地尝试了它,但它仍然需要opencv管理器,尽管它不会让应用程序变得很重吗?和iNeDebug可以在C++中使用NDK吗?没有尝试过自己的NDK组件,但是我想,他们也很清楚:“如果你想用异步初始化发布你的应用程序使用方法”,那么当我们加载这样的代码“>静态BooLoIn IITASYC(OpenCVIVRONSON 224Y8,上下文AppFielt,LoaderCallbackInterface Callback))那么我们的工作区或项目中不需要opencv库检查下面的链接,您的意思是只有opencv Java接口需要opencv管理器?是的,因为Java库二进制文件由管理器提供。在NDK中做所有事情的缺点是,它会增加应用程序的大小,因为所有静态链接库现在都成为应用程序的一部分。但是如果我运行的是本地活动,我将如何链接C++ LIBS?OpenCV管理器为我做到了这一点,不是吗?C/C++库不需要OpenCV管理器。[链接]()成功生成(通过ndk生成)后,项目的libs文件夹将包含本机库。您不必在Java代码中加载管理器。只有在Java代码中使用OpenCV函数时,才需要OpenCV管理器。