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)
{
assert( pJpegData != NULL );
int width = 0,height = 0,jpegs

本文介绍了如何利用libjpeg-turbo库来提高OpenCV在Android环境下解码JPEG图像的性能。通过示例代码展示了从JPEG数据流解码到cv::Mat的过程,减少了700+ms的解码时间。虽然turbojpeg对RGB和BGR格式支持良好,但其他多通道格式可能存在兼容性问题。
最低0.47元/天 解锁文章
605

被折叠的 条评论
为什么被折叠?



