opencv 对JPEG的解码,其内部实质上是基于第三方库libjpeg进行解码的。但是libjpeg本身的性能并不是很快。经测试对一张2336x4160分辨率的jpg文件进行解码,在android 环境下使用opencv imdecode 解码耗时居然有700+ms,这对于一些高性能的应用是不可取的。本文主要讲如何使用libjpeg-turbo 对JPEG 数据流进行解码,并转换成opencv cv::Mat结构。
对于如何在NDK下使用编译好的so库,在前几篇的文章都有提到,包括libjpeg-turbo 库的编译,调用等等。(不明白的同学可以参考前两篇文章)
那就直接贴代码吧:
jpeg2Mat.hpp
#include "include/turbojpeg.h"
#include
#include
#include
#include
/**
* decode JPEG format to XXX format
* @param pJpegData
* @param JpegdataSize
* @param convrt_flag
* "RGB" - see TJPF_RGB
* "BGR" - see TJPF_BGR
* ...
* see all support format at enum TJPF
*/
std::tuple,uint64_t,uint64_t,uint64_t> decodeJpeg2X(uint8_t* pJpegData,uint64_t JpegdataSize,const char* convrt_flag)
{