Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于DCT的Jpeg编码器 我尝试用C++中的DCT压缩JPEG图像。图像像素保存在CImg中。 首先,我将图像切成8x8像素的块状。 然后在所有的块中应用DCT。 最后利用矩阵Q进行量化处理。 下面的代码显示了我上面提到的所有步骤 CImg<float> comp(image.width(),image.height(),1,1,0); comp = image; float sum; vector< vector<float> >bloc(8, vector<float>(8)); // Quantization matrix CImg<> Q(8,8); Q(0,0)=16; Q(0,1)=11; Q(0,2)=10; Q(0,3)=16; Q(0,4)=24; Q(0,5)=40; Q(0,6)=51; Q(0,7)=61; Q(1,0)=12; Q(1,1)=12; Q(1,2)=14; Q(1,3)=19; Q(1,4)=26; Q(1,5)=58; Q(1,6)=60; Q(1,7)=55; Q(2,0)=14; Q(2,1)=13; Q(2,2)=16; Q(2,3)=24; Q(2,4)=40; Q(2,5)=57; Q(2,6)=69; Q(2,7)=56; Q(3,0)=14; Q(3,1)=17; Q(3,2)=22; Q(3,3)=29; Q(3,4)=51; Q(3,5)=87; Q(3,6)=80; Q(3,7)=62; Q(4,0)=18; Q(4,1)=22; Q(4,2)=37; Q(4,3)=56; Q(4,4)=68; Q(4,5)=109; Q(4,6)=103; Q(4,7)=77; Q(5,0)=24; Q(5,1)=35; Q(5,2)=55; Q(5,3)=64; Q(5,4)=81; Q(5,5)=104; Q(5,6)=113; Q(5,7)=92; Q(6,0)=49; Q(6,1)=64; Q(6,2)=78; Q(6,3)=87; Q(6,4)=103; Q(6,5)=121; Q(6,6)=120; Q(6,7)=101; Q(7,0)=72; Q(7,1)=92; Q(7,2)=95; Q(7,3)=98; Q(7,4)=112; Q(7,5)=100; Q(7,6)=103; Q(7,7)=99; Q *= quality; for (int u = 0; u < comp.width(); u += 8) { for (int k = 0; k < comp.height(); k += 8) { CImg<float> a = comp.get_crop(u, k, u + 7, k + 7); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if(i == 0 && j == 0) bloc[i][j] = 0.125; else if(i > 0 && j > 0) bloc[i][j] = 0.176776695296636881; else if((i > 0 && j == 0) || (i == 0 && j > 0)) bloc[i][j] = 0.25; sum = 0; for(int x = 0; x < 8; x++) { for(int y = 0; y < 8; y++) { sum = sum + a(x,y) * (cos (((2 * x + 1) * i * PI) / 16)) * (cos(((2 * y + 1) * j * PI) / 16)); } } comp.get_crop(u, k, u + 7, k + 7) = (ROUND((bloc[i][j] * sum) / Q(i,j))); } } } } cimgcomp(image.width(),image.height(),1,1,0); comp=图像; 浮点数; 向量bloc(8,向量(8)); //量化矩阵 cimgq(8,8); Q(0,0)=16;Q(0,1)=11;Q(0,2)=10;Q(0,3)=16;Q(0,4)=24;Q(0,5)=40;Q(0,6)=51;Q(0,7)=61; Q(1,0)=12;Q(1,1)=12;Q(1,2)=14;Q(1,3)=19;Q(1,4)=26;Q(1,5)=58;Q(1,6)=60;Q(1,7)=55; Q(2,0)=14;Q(2,1)=13;Q(2,2)=16;Q(2,3)=24;Q(2,4)=40;Q(2,5)=57;Q(2,6)=69;Q(2,7)=56; Q(3,0)=14;Q(3,1)=17;Q(3,2)=22;Q(3,3)=29;Q(3,4)=51;Q(3,5)=87;Q(3,6)=80;Q(3,7)=62; Q(4,0)=18;Q(4,1)=22;Q(4,2)=37;Q(4,3)=56;Q(4,4)=68;Q(4,5)=109;Q(4,6)=103;Q(4,7)=77; Q(5,0)=24;Q(5,1)=35;Q(5,2)=55;Q(5,3)=64;Q(5,4)=81;Q(5,5)=104;Q(5,6)=113;Q(5,7)=92; Q(6,0)=49;Q(6,1)=64;Q(6,2)=78;Q(6,3)=87;Q(6,4)=103;Q(6,5)=121;Q(6,6)=120;Q(6,7)=101; Q(7,0)=72;Q(7,1)=92;Q(7,2)=95;Q(7,3)=98;Q(7,4)=112;Q(7,5)=100;Q(7,6)=103;Q(7,7)=99; Q*=质量; 对于(int u=0;u0)) 集团[i][j]=0.25; 总和=0; 对于(int x=0;x_C++_Jpeg_Image Compression_Cimg_Dct - Fatal编程技术网

基于DCT的Jpeg编码器 我尝试用C++中的DCT压缩JPEG图像。图像像素保存在CImg中。 首先,我将图像切成8x8像素的块状。 然后在所有的块中应用DCT。 最后利用矩阵Q进行量化处理。 下面的代码显示了我上面提到的所有步骤 CImg<float> comp(image.width(),image.height(),1,1,0); comp = image; float sum; vector< vector<float> >bloc(8, vector<float>(8)); // Quantization matrix CImg<> Q(8,8); Q(0,0)=16; Q(0,1)=11; Q(0,2)=10; Q(0,3)=16; Q(0,4)=24; Q(0,5)=40; Q(0,6)=51; Q(0,7)=61; Q(1,0)=12; Q(1,1)=12; Q(1,2)=14; Q(1,3)=19; Q(1,4)=26; Q(1,5)=58; Q(1,6)=60; Q(1,7)=55; Q(2,0)=14; Q(2,1)=13; Q(2,2)=16; Q(2,3)=24; Q(2,4)=40; Q(2,5)=57; Q(2,6)=69; Q(2,7)=56; Q(3,0)=14; Q(3,1)=17; Q(3,2)=22; Q(3,3)=29; Q(3,4)=51; Q(3,5)=87; Q(3,6)=80; Q(3,7)=62; Q(4,0)=18; Q(4,1)=22; Q(4,2)=37; Q(4,3)=56; Q(4,4)=68; Q(4,5)=109; Q(4,6)=103; Q(4,7)=77; Q(5,0)=24; Q(5,1)=35; Q(5,2)=55; Q(5,3)=64; Q(5,4)=81; Q(5,5)=104; Q(5,6)=113; Q(5,7)=92; Q(6,0)=49; Q(6,1)=64; Q(6,2)=78; Q(6,3)=87; Q(6,4)=103; Q(6,5)=121; Q(6,6)=120; Q(6,7)=101; Q(7,0)=72; Q(7,1)=92; Q(7,2)=95; Q(7,3)=98; Q(7,4)=112; Q(7,5)=100; Q(7,6)=103; Q(7,7)=99; Q *= quality; for (int u = 0; u < comp.width(); u += 8) { for (int k = 0; k < comp.height(); k += 8) { CImg<float> a = comp.get_crop(u, k, u + 7, k + 7); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if(i == 0 && j == 0) bloc[i][j] = 0.125; else if(i > 0 && j > 0) bloc[i][j] = 0.176776695296636881; else if((i > 0 && j == 0) || (i == 0 && j > 0)) bloc[i][j] = 0.25; sum = 0; for(int x = 0; x < 8; x++) { for(int y = 0; y < 8; y++) { sum = sum + a(x,y) * (cos (((2 * x + 1) * i * PI) / 16)) * (cos(((2 * y + 1) * j * PI) / 16)); } } comp.get_crop(u, k, u + 7, k + 7) = (ROUND((bloc[i][j] * sum) / Q(i,j))); } } } } cimgcomp(image.width(),image.height(),1,1,0); comp=图像; 浮点数; 向量bloc(8,向量(8)); //量化矩阵 cimgq(8,8); Q(0,0)=16;Q(0,1)=11;Q(0,2)=10;Q(0,3)=16;Q(0,4)=24;Q(0,5)=40;Q(0,6)=51;Q(0,7)=61; Q(1,0)=12;Q(1,1)=12;Q(1,2)=14;Q(1,3)=19;Q(1,4)=26;Q(1,5)=58;Q(1,6)=60;Q(1,7)=55; Q(2,0)=14;Q(2,1)=13;Q(2,2)=16;Q(2,3)=24;Q(2,4)=40;Q(2,5)=57;Q(2,6)=69;Q(2,7)=56; Q(3,0)=14;Q(3,1)=17;Q(3,2)=22;Q(3,3)=29;Q(3,4)=51;Q(3,5)=87;Q(3,6)=80;Q(3,7)=62; Q(4,0)=18;Q(4,1)=22;Q(4,2)=37;Q(4,3)=56;Q(4,4)=68;Q(4,5)=109;Q(4,6)=103;Q(4,7)=77; Q(5,0)=24;Q(5,1)=35;Q(5,2)=55;Q(5,3)=64;Q(5,4)=81;Q(5,5)=104;Q(5,6)=113;Q(5,7)=92; Q(6,0)=49;Q(6,1)=64;Q(6,2)=78;Q(6,3)=87;Q(6,4)=103;Q(6,5)=121;Q(6,6)=120;Q(6,7)=101; Q(7,0)=72;Q(7,1)=92;Q(7,2)=95;Q(7,3)=98;Q(7,4)=112;Q(7,5)=100;Q(7,6)=103;Q(7,7)=99; Q*=质量; 对于(int u=0;u0)) 集团[i][j]=0.25; 总和=0; 对于(int x=0;x

基于DCT的Jpeg编码器 我尝试用C++中的DCT压缩JPEG图像。图像像素保存在CImg中。 首先,我将图像切成8x8像素的块状。 然后在所有的块中应用DCT。 最后利用矩阵Q进行量化处理。 下面的代码显示了我上面提到的所有步骤 CImg<float> comp(image.width(),image.height(),1,1,0); comp = image; float sum; vector< vector<float> >bloc(8, vector<float>(8)); // Quantization matrix CImg<> Q(8,8); Q(0,0)=16; Q(0,1)=11; Q(0,2)=10; Q(0,3)=16; Q(0,4)=24; Q(0,5)=40; Q(0,6)=51; Q(0,7)=61; Q(1,0)=12; Q(1,1)=12; Q(1,2)=14; Q(1,3)=19; Q(1,4)=26; Q(1,5)=58; Q(1,6)=60; Q(1,7)=55; Q(2,0)=14; Q(2,1)=13; Q(2,2)=16; Q(2,3)=24; Q(2,4)=40; Q(2,5)=57; Q(2,6)=69; Q(2,7)=56; Q(3,0)=14; Q(3,1)=17; Q(3,2)=22; Q(3,3)=29; Q(3,4)=51; Q(3,5)=87; Q(3,6)=80; Q(3,7)=62; Q(4,0)=18; Q(4,1)=22; Q(4,2)=37; Q(4,3)=56; Q(4,4)=68; Q(4,5)=109; Q(4,6)=103; Q(4,7)=77; Q(5,0)=24; Q(5,1)=35; Q(5,2)=55; Q(5,3)=64; Q(5,4)=81; Q(5,5)=104; Q(5,6)=113; Q(5,7)=92; Q(6,0)=49; Q(6,1)=64; Q(6,2)=78; Q(6,3)=87; Q(6,4)=103; Q(6,5)=121; Q(6,6)=120; Q(6,7)=101; Q(7,0)=72; Q(7,1)=92; Q(7,2)=95; Q(7,3)=98; Q(7,4)=112; Q(7,5)=100; Q(7,6)=103; Q(7,7)=99; Q *= quality; for (int u = 0; u < comp.width(); u += 8) { for (int k = 0; k < comp.height(); k += 8) { CImg<float> a = comp.get_crop(u, k, u + 7, k + 7); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if(i == 0 && j == 0) bloc[i][j] = 0.125; else if(i > 0 && j > 0) bloc[i][j] = 0.176776695296636881; else if((i > 0 && j == 0) || (i == 0 && j > 0)) bloc[i][j] = 0.25; sum = 0; for(int x = 0; x < 8; x++) { for(int y = 0; y < 8; y++) { sum = sum + a(x,y) * (cos (((2 * x + 1) * i * PI) / 16)) * (cos(((2 * y + 1) * j * PI) / 16)); } } comp.get_crop(u, k, u + 7, k + 7) = (ROUND((bloc[i][j] * sum) / Q(i,j))); } } } } cimgcomp(image.width(),image.height(),1,1,0); comp=图像; 浮点数; 向量bloc(8,向量(8)); //量化矩阵 cimgq(8,8); Q(0,0)=16;Q(0,1)=11;Q(0,2)=10;Q(0,3)=16;Q(0,4)=24;Q(0,5)=40;Q(0,6)=51;Q(0,7)=61; Q(1,0)=12;Q(1,1)=12;Q(1,2)=14;Q(1,3)=19;Q(1,4)=26;Q(1,5)=58;Q(1,6)=60;Q(1,7)=55; Q(2,0)=14;Q(2,1)=13;Q(2,2)=16;Q(2,3)=24;Q(2,4)=40;Q(2,5)=57;Q(2,6)=69;Q(2,7)=56; Q(3,0)=14;Q(3,1)=17;Q(3,2)=22;Q(3,3)=29;Q(3,4)=51;Q(3,5)=87;Q(3,6)=80;Q(3,7)=62; Q(4,0)=18;Q(4,1)=22;Q(4,2)=37;Q(4,3)=56;Q(4,4)=68;Q(4,5)=109;Q(4,6)=103;Q(4,7)=77; Q(5,0)=24;Q(5,1)=35;Q(5,2)=55;Q(5,3)=64;Q(5,4)=81;Q(5,5)=104;Q(5,6)=113;Q(5,7)=92; Q(6,0)=49;Q(6,1)=64;Q(6,2)=78;Q(6,3)=87;Q(6,4)=103;Q(6,5)=121;Q(6,6)=120;Q(6,7)=101; Q(7,0)=72;Q(7,1)=92;Q(7,2)=95;Q(7,3)=98;Q(7,4)=112;Q(7,5)=100;Q(7,6)=103;Q(7,7)=99; Q*=质量; 对于(int u=0;u0)) 集团[i][j]=0.25; 总和=0; 对于(int x=0;x,c++,jpeg,image-compression,cimg,dct,C++,Jpeg,Image Compression,Cimg,Dct,问题是,当我打开生成的压缩图像时,它看起来与真实图像完全相同。 我正在上传未压缩和压缩的图像,以便您更好地理解。 你能帮我理解问题是什么,或者我的代码是否正确,压缩后的图像是否正确? 谢谢大家!

问题是,当我打开生成的压缩图像时,它看起来与真实图像完全相同。 我正在上传未压缩和压缩的图像,以便您更好地理解。

你能帮我理解问题是什么,或者我的代码是否正确,压缩后的图像是否正确? 谢谢大家!