二 Android OpenCV NDK 开发 - 使用OpenCV 进行AndroidNDK开发中图像数据给Native代码

①传递图片路径:这是最差的方式,我使用过,速度很慢,主要用于前期开发的时候进行测试,测试Java层和Native层的互调是否正常。

②传递预览图像的字节数组到Native层,然后将字节数组处理成RGB或者RGBA的格式[具体哪种格式要看你的图像处理函数能否处理RGBA格式的,如果可以的话推荐转换成RGBA格式,因为返回的也是RGBA格式的。网上有很多的文章讨论如何转换:一种方式是使用一个自定义的函数进行编码转换(可以搜索到这个函数),另一个种方式是使用OpenCV中的Mat和cvtColor函数进行转换,接着调用图像处理函数,处理完成之后,将处理的结果保存在一个整形数组中(实际上就是RGB或者RGBA格式的图像数据),最后调用Bitmap的方法将其转换成bitmap返回。这种方法速度也比较慢,但是比第一种方案要快了不少,具体实现过程可以看下面的推荐书籍。

③使用OpenCV的摄像头:JavaCamera或者NativeCamera都行,好处是它进行了很多的封装,可以直接将预览图像的Mat结构传递给Native层,这种传递是使用Mat的内存地址(long型),Native层只要根据这个地址将其封装成Mat就可以进行处理了,另外,它的回调函数的返回值也是Mat,非常方便!这种方式速度较快。详细过程可以查看OpenCV-Android sdk的samples项目中的Tutorial2-MixedProcessing。

你可能感兴趣的:(二 Android OpenCV NDK 开发 - 使用OpenCV 进行AndroidNDK开发中图像数据给Native代码)