sam_code@hotmail.com

USB Camera在通过V4L2接口获取Camera数据时,有多种图像格式可选择。但最常用的却是YUV和MJPEG.

又因为YUV图片所占空间大,在超过640x480情况下,会超过USB数据传输带宽。

所以只能使用MJPEG.

现在就谈谈MJPEG相关内容。

1. 视频压缩格式:

1.1:JPEG (Joint Photographic Experts Group)压缩技术是所有图像压缩技术的基础。

它适合静态图像的压缩,直接处理整幅画面,压缩倍数为20-80倍,分辨率没有选择的余地。在传输中,必须要等整个压缩档传输完成才可以解压,这就造成传输时间较长。它是帧内压缩。

1.2. MJPEG(Motion JPEG):

在JPEG基础上发展起来的动态图像压缩技术,也是帧内压缩,只单独的对某一帧进行压缩,而基本不考虑视频流中不同帧之间的变化。其压缩后的图像还可以任意剪切。

Motion JPEG, 即动态JPEG.

按一定帧数使用JPEG算法压缩视频信号,完成动态视频的压缩。MJPEG图像流的单元就是一帧一帧的JPEG画片。

因为每帧可以任意存取,所以MJPEG常用于视频编辑系统。

1.3. MPEG:

其实是一个标准。

其中MPEG-4. 它会使用帧间数据。压缩比很高。应用广泛。

2. libjpeg-turbo:

jpeg, Mjpeg的压缩和解压,比较耗费CPU。

所以就有了libjpeg-turbo库,它可以更快的压缩和解压jpeg数据。

因为是帧内压缩,所以可以对JPEG数据进行各种处理,如放大/缩小,翻转,剪切,镜像等。

2.1: libjpeg-turbo 对JPEG的压缩和解压:

libjpeg-turbo提供压缩(Compress)和解压(Decompress)接口。

同时,它还有个概念----Transform.

2.1.1: 压缩:

给定RGB data. 把它压缩成指定jpeg文件。

A. 打开一个压缩实例:

tjhandle tjInitCompress(void)

B. 把给定pixel,w,h pitch等信息的数据,压缩成jpeg(给定sample,质量)数据。

int tjCompress2(tjhandle handle, const unsigned char

*srcBuf,

int width, int pitch, int height, int

pixelFormat,

unsigned char **jpegBuf, unsigned long

*jpegSize,

int jpegSubsamp, int jpegQual, int flags)

C. 销毁实例:

int tjDestroy(tjhandle handle)

2.1.2:解压:

把给定的JPEG数据,解压成RGB数据:

这个过程,只是简单的解压,或者仅仅是图片大小变化。

A. 打开一个解码实例

tjInstance = tjInitDecompress();

B. 通过读取到的jpeg数据,来分析文件头,获取图像信息(长宽,sample, colour信息等)

int tjDecompressHeader3(tjhandle handle,

const unsigned char

*jpegBuf,

unsigned long jpegSize, int

*width,

int *height, int

*jpegSubsamp,

int *jpegColorspace)

jpegBuf是jpeg数据。

C. 解压到指定格式,指定长宽数据:

int tjDecompress2(tjhandle handle, const unsigned char

*jpegBuf,

unsigned long jpegSize,

unsigned char *dstBuf,

int width, int pitch, int

height, int pixelFormat,

int flags)

width, height: 目标图像长宽。

pixelFormat: 目标图像格式, enum TJPF

中定义,如RGBX。

此时,dstBuf中的内容,就是解压过的,指定大小,深度,和图像格式的图片数据了。

如果指定为RGBX,则直接存文件即为BMP文件。

D. 销毁实例:

int tjDestroy(tjhandle handle)

2.1.3:Transform:

Transform是干什么呢,Sam觉得是因为要实质修改JPEG数据,重新排列。

比如剪切,翻转,镜像。这些动作叫做Transform.

A. 打开一个transform实例:

tjhandle tjInitTransform(void)

B. Transform转换:

tjtransform xform; //指定transform的参数,如裁剪区域

想要裁剪:

xform.r.x = iX; //左上角位置

xform.r.y = iY;

xform.r.h , xform.r.w //区域高度。

xform.options |= TJXOPT_CROP; //指定要剪切。

int tjTransform(tjhandle handle, const unsigned char

*jpegBuf,

unsigned long jpegSize, int n,

unsigned char **dstBufs, unsigned long

*dstSizes,

tjtransform *t, int flags)

dstBufs中保存这transform后的数据。

C. 可选: 获取新的jpeg数据信息:

DLLEXPORT int tjDecompressHeader3(tjhandle handle,

const unsigned char

*jpegBuf,

unsigned long jpegSize, int

*width,

int *height, int

*jpegSubsamp,

int *jpegColorspace)

D. 后续可以随意处理jpeg数据了。如解压。

E. 销毁:

int tjDestroy(tjhandle handle)

2.2: libjpeg-turbo对图像文件的处理:

unsigned char *tjLoadImage(const char *filename, int

*width,

int align, int *height, int *pixelFormat,

int flags)

int tjSaveImage(const char *filename, unsigned char

*buffer,

int width, int pitch, int height, int

pixelFormat,

int flags)

2.3:获取放大缩小factor:

libjpet-turbo并不可以随意比例放大缩小,而是指定了一系列(16个)比例系数。

可以先获取这个列表:

scalingFactors =

tjGetScalingFactors(&numScalingFactors);

if(scalingFactors == NULL)

{

printf("\nGet Scaling Factor Error.\n");

return -1;

}

printf("\nThere are [%d] ScalingFactors\n",

numScalingFactors);

for(int i = 0; i < numScalingFactors; i++)

{

printf("\t Numerator/Denominator is:[%d/%d]\n",

scalingFactors[i].num, scalingFactors[i].denom);

}

此时就可以得到turbo-jpeg给定的Scaling Factor.

android mjpg格式,Camera常用格式MJPEG和jpeg-turbo库相关推荐

  1. 常用格式如何互相转换(jpg转png)

    现在因为图片格式的多样性,虽然多出了很多的选择,但是我们一般使用的还是默认的图片格式,有时候会使用到固定的格式,如果不兼容就要转换图片格式,那常用格式如何互相转换呢?以jpg转png为例吧! 1.在电 ...

  2. 怎么转换常用图片格式,jpg格式怎么转换

    图片的格式是分很多种的,我们最常用的图片格式大概就是jpg.png.bmp,但是可能由于各种需要需要转换格式,比如我们在上传自己的×××件的时候,可能会有专门允许的格式,那这个时候就需要将照片转换成需 ...

  3. 2020Android开发常用的开源框架、开源库

    前言 作为一名优秀的程序员,熟练的掌握一些开源框架和开源库,能使你的开发效率倍增,以下是Android开发中比较常用到的开源框架和库. TextView HTextView 一款支持TextView文 ...

  4. 【Android 安装包优化】WebP 图片格式兼容与性能 ( Android 中的 WebP 图片格式兼容问题 | Android 中的 WebP 图片格式性能 )

    文章目录 一.Android 中的 WebP 图片格式兼容问题 二.Android 中的 WebP 图片格式性能 三.参考资料 一.Android 中的 WebP 图片格式兼容问题 在 Android ...

  5. 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )

    文章目录 一. 图片质量压缩 二. 图片尺寸压缩 三. Android 10 文件访问 四. 完整源码示例 上一篇博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供 ...

  6. SCI/EI期刊投稿 Reply Letter 常用格式总结

    SCI/EI期刊投稿Reply Letter常用格式总结 整个论文投稿的过程中,会遇到各种问题,需要我们向主编询问或是回复.下面主要总结了responses to the comments,以及催稿信 ...

  7. android 时间戳 转日期格式,在Android中转换为简单日期格式或Unix时间戳日期?

    我收到日期(2015-03-20T06:34:01.831183 + 01:00)从服务器这不是简单的日期格式,我想这种类型的日期转换为简单的日期格式一样(yyyyMMddHHmmssSSSS)在An ...

  8. caffe常用格式binaryproto和leveldb

    深度学习中,我们所用到的图片格式大多是jpg,jpeg,png等,而且图片的大小尺寸有时也会不一样.但是在caffe中数据类型是lmdb或leveldb,那么我们需要将图片格式转换为caffe环境需要 ...

  9. html 文件常用格式

    html 文件常用格式 <!DOCTYPE html> <html lang="zh"> <head><meta charset=&quo ...

  10. OpenCV技巧 | 常用格式图片保存为透明背景图片(附Python源码)-教你轻松制作Logo

    导读 本文主要介绍使用OpenCV将常用格式图片保存为透明背景图片的方法与实现代码. 实现目标 本文的目标有如下两个: ① 将常见格式[jpg/png/bmp]白色背景图片转换保存为透明背景图片: ② ...

最新文章

  1. 【Spring Security】五、自定义过滤器
  2. 算法基础知识科普:8大搜索算法之顺序搜索
  3. 解决IDM“警告:您在以管理员身份运行IDM,在该模式下,IDM无法接管浏览器的下载事件”的问题。
  4. scala入门示例helloworld及idea中集成Scala库
  5. 直接点不玩虚的--启明云端千元现金红包、50pcs开发板直播现场拿走不谢
  6. 假如有人把支付宝存储服务器炸了(附文末福利)
  7. [Python图像处理] 二十七.OpenGL入门及绘制基本图形(一)
  8. java 微信图片上传_微信小程序图片上传java端以及前端实现
  9. pip 20.3 发布:更改默认依赖解析器、即将停止支持 Python 2.7
  10. 谈谈JavaScript中的数组、集合及效率
  11. 零基础编译ffmpeg到wasm
  12. 百度人脸识别文档冲突,facetype应是face_type
  13. [数据结构] 左偏树
  14. c语言试题库 文库,C语言试题库
  15. 根据人脸关键点做人脸对齐face alignment----C++实现
  16. 《勒索软件防护体系建设指南》发布|美创深度参编,入选代表性厂商
  17. 在ios上运行安卓计算机软件,安卓竟然也能运行iOS,苹果怒了!
  18. Android 7.0配置fileprovider共享文件 解决FileUriExposedException
  19. 软件工程大作业——在线零食销售系统
  20. cousera of pku:魔兽世界:行军

热门文章

  1. 瑞芯微板子人脸识别demo展现
  2. opc服务器组态文件已写保护_opc服务器组态文件已写保护
  3. Python开发 之 Python3打包(windows/linux)详解
  4. 没有了耳机接口,怎么让手机同时支持充电、听歌?USB-C音频方案了解一下
  5. MFC--按键、按钮按下和弹起事件检测
  6. Python生信练习——hg38每条染色体基因,转录本的分布
  7. 迅捷PDF转Word转换器
  8. Spring实战第五章idea复现
  9. 解决无法修改日志时间的问题(Local time zone must be set--see zic manual page 2019 )
  10. 阅读源码的经验总结,以进一步的提升自己,加油小甜妮儿