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