如果我们尝试使用 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);
其中 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 的正确链接。
关于android - opencv manager 是强制安装的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955822/