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管理器。