C++实现对RGB图片进行编码的示例代码.docx

C++实现对RGB图片进行编码的示例代码.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

C++实现对RGB图片进行编码的示例代码

目录1.转换色彩空间2.离散余弦变化3.zigzag编码4.量化5.Huffman编码代码如下依据上一篇的JPEG编码所得到的RGB信息,我们可以重新对RGB图片进行编码,也可对其他图片如BMP所得到的RGB信息进行编码,来得到*.jpg文件,注意我这里实现的JPEG编码不知道为啥编码出来的文件比原来大了好多。还有要注意的地方,下面会着重写的

1.转换色彩空间

看了挺多博客,说是有不同的公式分别对应不同用途的图片。我这里使用的RGB转YCbCr的公式如下:

doubley=(0.299*t.red+0.587*t.green+0.114*t.blue-128);

doublecb=(-0.1687*t.red-0.3313*t.green+0.500*t.blue);

doublecr=(0.500*t.red-0.4187*t.green-0.0813*t.blue);

这里t的结构如下,如果要是还有Alpha这个值也可以添加进去

structRGB{

uint8_tred;

uint8_tgreen;

uint8_tblue;

};

2.离散余弦变化

使用矩阵乘法,转化那个DCT变换的公式,最后会得到Y=AXA这个公式A是指A的转置,X是输入,Y是输出

矩阵A的获取方式如下:

double**JPEGData::createDCTAndIDCTArray(introw){

double**res=newdouble*[row];

for(inti=0;ii++)res[i]=newdouble[row];

for(inti=0;ii++){

for(intj=0;jj++){

doublet=0;

if(i==0)t=sqrt(1.0/row);

elset=sqrt(2.0/row);

res[i][j]=t*cos(M_PI*(j+0.5)*i/row);

returnres;

}

计算Y的方法如下:

voidJPEGData::DCT(double**originMatrix){

//原理Y=A*X*A

vectorvectordoubletemp(ROW,vectordouble(COL,0));

for(inti=0;ii++){

for(intj=0;jj++){

doublesum=0;

for(intk=0;kk++){

sum+=DCTAndIDCTArray[i][k]*originMatrix[k][j];

temp[i][j]=sum;

for(inti=0;ii++){

for(intj=0;jj++){

doublesum=0;

for(intk=0;kk++){

sum+=temp[i][k]*DCTAndIDCTArray[j][k];

originMatrix[i][j]=sum;

}

3.zigzag编码

此编码的目的是为了使更多的0聚到一起,从而压缩文件大小(我打断点发现我这里0里面经常会出现1)。编码方式是将88的矩阵变成164的矩阵。

4.量化

我看到很多博客都没有详细说明,我这里说一下:

此步量化是对已经zigzag编码后的量化,就是对已经变成164的数组的变换,而对应的量化表如下,也是164的数组,对应项相乘即可

staticuint8_tYQualityTable[64]={

16,11,10,16,24,40,51,61,

12,12,14,19,26,58,60,55,

14,13,16,24,40,57,69,56,

14,17,22,29,51,87,80,62,

18,22,37,56,68,109,103,77,

24,35,55,64,81,104,113,92,

49,64,78,87,103,121,120,101,

72,92,95,98,112,100,103,99};

staticuint8_tCQualityTable[64]={

17,18,24,47,99,99,9

文档评论(0)

139****7676 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档