首页 > 其他分享 >JPEG的的编解码

JPEG的的编解码

时间:2024-09-24 17:46:31浏览次数:7  
标签:编解码 int argv char JPEG 数组 指针

JPEG的的编解码过程

JPEG采用YCrCb的颜色模式,通常叫着YUV,其中Y代表亮度,Cr,cb代表色度和饱和度。
  而我们通常熟悉的计算机系统采用RGB颜色模式
1.采样-分块-量化--数据编码
  分块 数据采样完成后就需要进行下一步操作,进行空间域向频率域转换DCT变换
  JPEG分别针对Y亮度、UV色度和饱和度提供两张不同的量化表

1.采样 YUV422P 也属于YUV422的一种,它是一种Plane模式,即平面模式,
    并不是将YUV数据交错存储,
	 而是先存放所有的Y分量,然后存储所有的U(Cb)分量, 最后存储所有的V(Cr)分量
    一个2*2的像素块中,对于4个像素点,采样4个Y的值,两个U的值,两个V的值;

cv::Size(1920,1280)
 CV_8UC1 ----->8位无符号整型单通道矩阵
 CV_32FC2----->32位浮点型双通道矩阵

代码库

 libjpeg 是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。
 ibpng   是一款C语言编写的比较底层的读写PNG文件的跨平台的库
 
 libjpeg-turbo图像编解码器
 
 https://github.com/ApolloAuto/apollo/blob/master/modules/common_msgs/sensor_msgs/sensor_image.proto
 https://github.com/CESNET/GPUJPEG/blob/master/libgpujpeg/gpujpeg_encoder.h
 https://sourceforge.net/projects/libjpeg-turbo/files/
 https://github.com/lilohuang/PyTurboJPEG
 
 内存数据给到结构体
   v4l2接口直接获取摄像头数据。v4l2是c语言
 
 RGB搞到内存
  GPU解码被称为硬件解码,而CPU解码是软件解码
  
  利用GPU来加速处理图像编解码以及图像处理, 为此很有必要先了解J
  
  CPU和GPU的内存在物理上是独立的,并通过PCI-Express总线相连 PCIe带宽最高也十几个G
  NVIDIA的API里,可以看到一般CPU称为Host,GPU称为Device。
      所以也就有了htod,dtoh,dtod代表3种不同的传输方向
  	
  CPU分配内存主要有两种方式:
  	通过C标准库中的malloc函数完成  调用CUDA中的cudaMallocHost函数

定位模块

全球定位系统(GPS)和惯性测量单元(IMU)集成已成为实现可靠和精确位置跟踪的基石
  
a. 全球定位系统(GPS)
   RTK(Real - time kinematic,实时动态)载波相位差分技术  
  
b. IMU测量值解释-IMU,全称inertial measurement unit,即惯性测量单元,主要用于测量自身位姿,位姿包含位置和姿态
     IMU在测量时,得到的角速度或者加速度均是相对于地心惯性系结果,
      并且将该结果表示到Body坐标系下,就形成了最终的IMU输出。
	IMU容易因误差积累而产生漂移,导致位置和速度估计不准确。。惯导可以拿到:角速度 加速度 以及位姿 

轮式里程计线速度和角速度
自定位以及基于航位推测(Dead-reckoning, DR)估计的里程计信息	

C++ 编程起始

int main(int argc,char* argv[]) 也可以写成 int main(int argc,char** argv)
int main(int argc,char* argv[]) 也可以写成 int main(int argc,char** argv)。
     argc 表示程序运行时发送给main函数的命令行参数的个数(包括可执行程序以及传参)。
     argv[]是字符指针数组,它的每个元素都是字符指针,指向命令行中每个参数的第一个字符。
     
     argv[0]指向可执行程序。
     argv[1]指向可执行程序后的第一个字符串。
     argv[2]指向可执行程序后的第二个字符串 。
     argv[3]指向可执行程序后的第三个字符串 。
     argv[argc]为NULL。
--表现形式和内容本质
    char* argv[]和char** argv的声明差异,从声明、内存管理和文件作用域
    声明差异-语法
         char* argv[]声明一个数组argv,该数组保存多个指向char类型的指针
         char **argv声明 argv为指向(指向 char 类型的指针)的指针
        换句话说,一个是数组类型的声明,一个是指针类型的声明
    从内存管理的角度分析
       在声明数组的时候,会在内存中分配连续的数组空间
       在分配指针的时候,不会分配上述空间
    从函数传参
        对于函数传参,这两种方式的运行结果是相同的
		
	指针数组:用于存储指针的数组
	   char* argv[]来说,首先结合的时argv[]数组,这个数组中的数据类项是 char*, 因此是指针数组
	   char (*p)[5]首先结合的是(*p),这是个指针,指向的是个数组,因此是数组指针
	   *argv 是数组中第一个元素相当于line[0],argv[n]就相当于line[n],即地址一个指针,
	   **argv  是数组中存储的指针所指向的元素,即具体的字符。

标签:编解码,int,argv,char,JPEG,数组,指针
From: https://www.cnblogs.com/ytwang/p/18429714

相关文章

  • 【组件】前端js HEIC/HEIF 转换为JPEG、PNG或GIF格式 苹果格式
    【组件】前端jsHEIC/HEIF转换为JPEG、PNG或GIF格式Heic2any:Client-sideconversionofHEIC/HEIFimagefilestoJPEG,PNG,orGIFinthebrowser.https://alexcorvi.github.io/heic2any/#demoGitHub-alexcorvi/heic2any:ConvertingHEIF/HEIFimageformatstoPNG/GIF/J......
  • Deformable-DETR改进|爆改模型|在可变形编解码器之间加入RT-DETR中的CCFM模块(附代码+
    一、文本介绍本文修改的模型是Deformable-DETR,修改的位置是在可变形编码器和可变形解码器之间,在可变形编码器和可变形解码器之间加入RT-DERT中的CCFM模块,CCFM模块的输入为可变形编码器的最高层级特征图以及backbone的输出。CCFM模块可以提升模型的特征融合能力。二、模型图......
  • JPEGWD数据集,焊接缺陷检测NDT专用数据集RGB钢板焊缝缺陷识别任务和分类任务数据集(JPEG
    项目背景:焊接是制造业中的关键工艺之一,焊接质量的好坏直接影响到产品的安全性和可靠性。焊接缺陷检测(Non-DestructiveTesting,NDT)是确保焊接质量的重要手段。传统的焊接缺陷检测方法依赖于人工目视检查,效率低下且易受主观因素影响。近年来,随着计算机视觉技术的发展,基于机器......
  • Spring Cloud全解析:服务调用之Feign的编解码器
    Feign的编解码器编码器在向服务发送请求时,有些情况需要对请求内容进行处理publicclassFeignSpringFormEncoderimplementsEncoder{@Overridepublicvoidencode(Objectobject,TypebodyType,RequestTemplatetemplate)throwsEncodeException解码器可以......
  • 如何看待2020年的最新国际视频编解码标准H.266?
    技术背景与发布H.266,也被称为多功能视频编码(VersatileVideoCoding,简称VVC),是2020年定稿并发布的最新一代国际视频编码标准。发布时间与机构:H.266由ISO/IECMPEG和ITU-TVCEG联合制定,于2020年7月定稿。ITU第一版于当年11月正式发布,ISO/IEC第一版则于2021年2月正式发布。标准目标:H.2......
  • 优秀的安防视频监控平台应该具备怎样的视频编解码能力?
    随着安防技术的飞速发展,监控平台作为保障公共安全、维护社会秩序的重要工具,其性能与效率日益成为行业关注的焦点。其中,监控平台的视频编码能力在视频监控系统中扮演着至关重要的角色,视频编码技术作为监控系统的核心组成部分,直接影响着视频数据的传输效率、存储成本及画质表现。......
  • JPEG格式研究——(2)JPEG文件格式
    JPEG文件除了图像数据之外,还保存了与图片相关的各种信息,这些信息通过不同类型的TAG存储在文件中。TAGJPEG通过TAG标记压缩书记之外的信息。所有的TAG都包含一个TAG类型,TAG类型大小为两个字节,位于一个TAG的最前面。TAG类型的第一个字节一定为0xFF以下是部分常见的TAG类型TAG......
  • 两种常见的视频编解码:H264和H265
    H.264(也称为AVC:AdvancedVideoCoding)是一种广泛使用的视频编码标准,以其高压缩比和良好的视频质量而著称。它能够以较低的比特率编码高质量视频,适合录制、缩小视频以及通过网络共享高清数字视频数据。H.264支持多种分辨率、帧速率和颜色深度,因此被广泛应用于各种平台和软......
  • 深度解析G711编解码流程与实现(一)
    目录G711编码基础G711编解码实现总结G711编码标准是一种广泛应用于语音压缩的算法,它通过对线性脉冲编码调制(PCM)信号进行非线性压缩,实现了语音数据的高效存储和传输。G711算法主要包含A律和μ律两种编码方式,两者在国际通信中均有广泛应用。本文将深入探讨......
  • CMake构建学习笔记4-libjpeg库的构建
    libjpeg是一个广泛使用的开源库,用于处理JPEG(JointPhotographicExpertsGroup)图像格式的编码、解码、压缩和解压缩功能,是许多图像处理软件和库的基础。libjpeg本身的构建没什么特别的,不过值得说道的是libjpeg存在一个高性能分支叫做libjpeg-turbo,通过汇编代码使用SIMD(SingleIns......