资源简介
是一个课程作业,在vs2013下写的一个完整jpeg编码程序,包含了完整的压缩过程从图像分块到最后三个通道分别被压缩为二进制码,但是不包含解码过程,用了几个opencv2.4.9中读取存储图像的函数
代码片段和文件信息
#include
#include
#include
using namespace std;
using namespace cv;
#define height 8
#define width 8 //定义8*8块的高和宽
#define Q 7 //定义控制量化步长的Q值
//定义亮度区域和色度区域的量化矩阵
int QY[8][8] = { { 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 }
};
int QC[8][8] = { { 17 18 24 47 99 99 99 99 }
{ 18 21 26 66 99 99 99 99 }
{ 24 26 56 99 99 99 99 99 }
{ 47 66 99 99 99 99 99 99 }
{ 99 99 99 99 99 99 99 99 }
{ 99 99 99 99 99 99 99 99 }
{ 99 99 99 99 99 99 99 99 }
{ 99 99 99 99 99 99 99 99 }
};
//定义一个进行Zag-Zig扫描的表
int Zig_8[64] = { 0 1 8 16 9 2 3 10
17 24 32 25 18 11 4 5
12 19 26 33 40 48 41 34
27 20 13 6 7 14 21 28
35 42 49 56 57 50 43 36
29 22 15 23 30 37 44 51
58 59 52 45 38 31 39 46
53 60 61 54 47 55 62 63 };
//定义量化函数
void LH_QY(Mat &srcImage)
{
for (int i = 0; i < srcImage.rows; i++)
for (int j = 0; j < srcImage.cols; j++)
{
srcImage.at(i j) = round(srcImage.at(i j) / (QY[i][j]*Q));
}
}
void LH_QC(Mat &srcImage)
{
for (int i = 0; i < srcImage.rows; i++)
for (int j = 0; j < srcImage.cols; j++)
{
srcImage.at(i j) = round(srcImage.at(i j) / (QC[i][j]*Q));
}
}
//定义反量化函数
void ILH_QY(Mat &srcImage)
{
for (int i = 0; i < srcImage.rows; i++)
for (int j = 0; j < srcImage.cols; j++)
{
srcImage.at(i j) = srcImage.at(i j) * QY[i][j];
}
}
void ILH_QC(Mat &srcImage)
{
for (int i = 0; i < srcImage.rows; i++)
for (int j = 0; j < srcImage.cols; j++)
{
srcImage.at(i j) = srcImage.at(i j) * QC[i][j];
}
}
//定义了一个文件存储的函数
void storage_int(Mat mat char* filename)
{
FILE *fp = fopen(filename “w“);
for (int i = 0; i < mat.rows; i++)
{
for (int j = 0; j < mat.cols; j++)
{
fprintf(fp “%d“ mat.at(i j));
fprintf(fp “\t“);
}
fprintf(fp “\n“);
}
fclose(fp);
}
void storage_float(Mat mat char* filename)
{
FILE *fp = fopen(filename “w“);
for (int i = 0; i < mat.rows; i++)
{
for (int j = 0; j < mat.cols; j++)
{
fprintf(fp “%f“ mat.at(i j));
fprintf(fp “\t“);
}
fprintf(fp “\n“);
}
fclose(fp);
}
//存储行程编码的非零数之间的0的个数,非零数
struct Temp_1
{
string number_zero;
string value;
};
//存储0的个数,非零数二进制编码,编码长度
struct Temp_2
{
string number_zero;//0的个数
string code_len;//编码长度
string code;//编码
};
//存储前面(0的个数+编码长度)合并后的结果,非零数编码
struct Temp_3
{
string he_bin;//前面两位合并后的结果
string code;//编码
};
//存储编码后的结果
struct Temp_4
{
string code_1;//哈夫曼编码
string code_2;//二进制编码
};
//声明十进制与二进制对应的表
struct bitTable
{
string valu
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-10 22:11 JPEG编码\
目录 0 2018-03-10 22:11 JPEG编码\Debug\
文件 175104 2017-12-27 19:00 JPEG编码\Debug\JPEG编码.exe
文件 7274884 2017-12-27 19:00 JPEG编码\Debug\JPEG编码.ilk
文件 6106112 2017-12-27 19:00 JPEG编码\Debug\JPEG编码.pdb
目录 0 2018-03-10 22:11 JPEG编码\JPEG编码\
文件 36 2017-12-27 18:59 JPEG编码\JPEG编码.opensdf
文件 976 2017-12-20 14:12 JPEG编码\JPEG编码.sln
文件 15872 2017-12-20 19:46 JPEG编码\JPEG编码.v12.suo
目录 0 2018-03-10 22:11 JPEG编码\JPEG编码\Debug\
文件 3700 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\JPEG编码.log
文件 714567 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\JPEG编码.obj
目录 0 2018-03-10 22:11 JPEG编码\JPEG编码\Debug\JPEG编码.tlog\
文件 590 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\JPEG编码.tlog\cl.command.1.tlog
文件 10146 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\JPEG编码.tlog\CL.read.1.tlog
文件 372 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\JPEG编码.tlog\CL.write.1.tlog
文件 160 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\JPEG编码.tlog\JPEG编码.lastbuildstate
文件 1884 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\JPEG编码.tlog\li
文件 4964 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\JPEG编码.tlog\li
文件 346 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\JPEG编码.tlog\li
文件 592896 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\vc120.idb
文件 1355776 2017-12-27 19:00 JPEG编码\JPEG编码\Debug\vc120.pdb
目录 0 2018-03-10 22:11 JPEG编码\JPEG编码\images\
文件 3126 2017-12-20 11:26 JPEG编码\JPEG编码\images\girl_32_32.bmp
文件 21647 2017-12-27 18:59 JPEG编码\JPEG编码\JPEG编码.cpp
文件 4177 2017-12-20 14:15 JPEG编码\JPEG编码\JPEG编码.vcxproj
文件 951 2017-12-20 14:15 JPEG编码\JPEG编码\JPEG编码.vcxproj.filters
- 上一篇:IBM Websphere MQ
- 下一篇:WCF理论到实践初级中级适用推荐
评论
共有 条评论