1 | initial version |
seems you are right. you can create an issue about this problem
TEST CODE
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// Create mat with alpha channel
Mat mat = imread("Astro_4D_stars_proper_radial_g_b_8mag_big.png");
vector<int> compression_params;
compression_params.push_back(IMWRITE_PNG_COMPRESSION);
compression_params.push_back(0);
compression_params.push_back(IMWRITE_PNG_STRATEGY);
compression_params.push_back(IMWRITE_PNG_STRATEGY_DEFAULT);
for (int i = 0; i < 10; i++)
for (int j = 0; j < 5; j++)
{
compression_params[1] = i;
compression_params[3] = j;
imwrite(format("PNG_STRATEGY_%d_PNG_COMPRESSION_%d.png", j, i), mat, compression_params);
}
imwrite("PNG_SAVED_DEFAULT.png", mat);
return 0;
}
here is the result sizes
Astro_4D_stars_proper_radial_g_b_8mag_big.png 1.966.656
PNG_SAVED_DEFAULT.png 3.245.449
PNG_STRATEGY_0_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_0_PNG_COMPRESSION_1.png 3.157.900
PNG_STRATEGY_0_PNG_COMPRESSION_2.png 3.039.178
PNG_STRATEGY_0_PNG_COMPRESSION_3.png 2.904.732
PNG_STRATEGY_0_PNG_COMPRESSION_4.png 2.637.388
PNG_STRATEGY_0_PNG_COMPRESSION_5.png 2.582.198
PNG_STRATEGY_0_PNG_COMPRESSION_6.png 2.529.017
PNG_STRATEGY_0_PNG_COMPRESSION_7.png 2.523.274
PNG_STRATEGY_0_PNG_COMPRESSION_8.png 2.503.723
PNG_STRATEGY_0_PNG_COMPRESSION_9.png 2.477.291
PNG_STRATEGY_1_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_1_PNG_COMPRESSION_1.png 3.157.900
PNG_STRATEGY_1_PNG_COMPRESSION_2.png 3.039.178
PNG_STRATEGY_1_PNG_COMPRESSION_3.png 2.904.732
PNG_STRATEGY_1_PNG_COMPRESSION_4.png 2.603.165
PNG_STRATEGY_1_PNG_COMPRESSION_5.png 2.566.294
PNG_STRATEGY_1_PNG_COMPRESSION_6.png 2.519.976
PNG_STRATEGY_1_PNG_COMPRESSION_7.png 2.515.584
PNG_STRATEGY_1_PNG_COMPRESSION_8.png 2.498.000
PNG_STRATEGY_1_PNG_COMPRESSION_9.png 2.475.941
PNG_STRATEGY_2_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_2_PNG_COMPRESSION_1.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_2.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_3.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_4.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_5.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_6.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_7.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_8.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_9.png 5.175.597
PNG_STRATEGY_3_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_3_PNG_COMPRESSION_1.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_2.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_3.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_4.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_5.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_6.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_7.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_8.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_9.png 2.762.428
PNG_STRATEGY_4_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_4_PNG_COMPRESSION_1.png 3.642.295
PNG_STRATEGY_4_PNG_COMPRESSION_2.png 3.492.898
PNG_STRATEGY_4_PNG_COMPRESSION_3.png 3.347.030
PNG_STRATEGY_4_PNG_COMPRESSION_4.png 3.058.305
PNG_STRATEGY_4_PNG_COMPRESSION_5.png 2.988.217
PNG_STRATEGY_4_PNG_COMPRESSION_6.png 2.915.866
PNG_STRATEGY_4_PNG_COMPRESSION_7.png 2.904.503
PNG_STRATEGY_4_PNG_COMPRESSION_8.png 2.876.399
PNG_STRATEGY_4_PNG_COMPRESSION_9.png 2.849.642
2 | No.2 Revision |
seems you are right. you can create an issue about this problem
TEST CODE
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// Create mat with alpha channel
Mat mat = imread("Astro_4D_stars_proper_radial_g_b_8mag_big.png");
vector<int> compression_params;
compression_params.push_back(IMWRITE_PNG_COMPRESSION);
compression_params.push_back(0);
compression_params.push_back(IMWRITE_PNG_STRATEGY);
compression_params.push_back(IMWRITE_PNG_STRATEGY_DEFAULT);
for (int i = 0; i < 10; i++)
for (int j = 0; j < 5; j++)
{
compression_params[1] = i;
compression_params[3] = j;
imwrite(format("PNG_STRATEGY_%d_PNG_COMPRESSION_%d.png", j, i), mat, compression_params);
}
imwrite("PNG_SAVED_DEFAULT.png", mat);
return 0;
}
here is the result sizes
Astro_4D_stars_proper_radial_g_b_8mag_big.png 1.966.656
PNG_SAVED_DEFAULT.png 3.245.449
PNG_STRATEGY_0_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_0_PNG_COMPRESSION_1.png 3.157.900
PNG_STRATEGY_0_PNG_COMPRESSION_2.png 3.039.178
PNG_STRATEGY_0_PNG_COMPRESSION_3.png 2.904.732
PNG_STRATEGY_0_PNG_COMPRESSION_4.png 2.637.388
PNG_STRATEGY_0_PNG_COMPRESSION_5.png 2.582.198
PNG_STRATEGY_0_PNG_COMPRESSION_6.png 2.529.017
PNG_STRATEGY_0_PNG_COMPRESSION_7.png 2.523.274
PNG_STRATEGY_0_PNG_COMPRESSION_8.png 2.503.723
PNG_STRATEGY_0_PNG_COMPRESSION_9.png 2.477.291
PNG_STRATEGY_1_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_1_PNG_COMPRESSION_1.png 3.157.900
PNG_STRATEGY_1_PNG_COMPRESSION_2.png 3.039.178
PNG_STRATEGY_1_PNG_COMPRESSION_3.png 2.904.732
PNG_STRATEGY_1_PNG_COMPRESSION_4.png 2.603.165
PNG_STRATEGY_1_PNG_COMPRESSION_5.png 2.566.294
PNG_STRATEGY_1_PNG_COMPRESSION_6.png 2.519.976
PNG_STRATEGY_1_PNG_COMPRESSION_7.png 2.515.584
PNG_STRATEGY_1_PNG_COMPRESSION_8.png 2.498.000
PNG_STRATEGY_1_PNG_COMPRESSION_9.png 2.475.941
PNG_STRATEGY_2_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_2_PNG_COMPRESSION_1.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_2.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_3.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_4.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_5.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_6.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_7.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_8.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_9.png 5.175.597
PNG_STRATEGY_3_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_3_PNG_COMPRESSION_1.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_2.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_3.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_4.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_5.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_6.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_7.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_8.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_9.png 2.762.428
PNG_STRATEGY_4_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_4_PNG_COMPRESSION_1.png 3.642.295
PNG_STRATEGY_4_PNG_COMPRESSION_2.png 3.492.898
PNG_STRATEGY_4_PNG_COMPRESSION_3.png 3.347.030
PNG_STRATEGY_4_PNG_COMPRESSION_4.png 3.058.305
PNG_STRATEGY_4_PNG_COMPRESSION_5.png 2.988.217
PNG_STRATEGY_4_PNG_COMPRESSION_6.png 2.915.866
PNG_STRATEGY_4_PNG_COMPRESSION_7.png 2.904.503
PNG_STRATEGY_4_PNG_COMPRESSION_8.png 2.876.399
PNG_STRATEGY_4_PNG_COMPRESSION_9.png 2.849.642
EDIT: i tested both images (original and saved by OpenCV) in https://compress-or-die.com/analyze
only difference : original image's ColorType is Palette
and OpenCV's is RGB
i think the original image has only different tones of yellow and this is the reason for lesser size
3 | No.3 Revision |
seems you are right. you can create an issue about this problem
TEST CODE
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// Create mat with alpha channel
Mat mat = imread("Astro_4D_stars_proper_radial_g_b_8mag_big.png");
vector<int> compression_params;
compression_params.push_back(IMWRITE_PNG_COMPRESSION);
compression_params.push_back(0);
compression_params.push_back(IMWRITE_PNG_STRATEGY);
compression_params.push_back(IMWRITE_PNG_STRATEGY_DEFAULT);
for (int i = 0; i < 10; i++)
for (int j = 0; j < 5; j++)
{
compression_params[1] = i;
compression_params[3] = j;
imwrite(format("PNG_STRATEGY_%d_PNG_COMPRESSION_%d.png", j, i), mat, compression_params);
}
imwrite("PNG_SAVED_DEFAULT.png", mat);
return 0;
}
here is the result sizes
Astro_4D_stars_proper_radial_g_b_8mag_big.png 1.966.656
PNG_SAVED_DEFAULT.png 3.245.449
PNG_STRATEGY_0_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_0_PNG_COMPRESSION_1.png 3.157.900
PNG_STRATEGY_0_PNG_COMPRESSION_2.png 3.039.178
PNG_STRATEGY_0_PNG_COMPRESSION_3.png 2.904.732
PNG_STRATEGY_0_PNG_COMPRESSION_4.png 2.637.388
PNG_STRATEGY_0_PNG_COMPRESSION_5.png 2.582.198
PNG_STRATEGY_0_PNG_COMPRESSION_6.png 2.529.017
PNG_STRATEGY_0_PNG_COMPRESSION_7.png 2.523.274
PNG_STRATEGY_0_PNG_COMPRESSION_8.png 2.503.723
PNG_STRATEGY_0_PNG_COMPRESSION_9.png 2.477.291
PNG_STRATEGY_1_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_1_PNG_COMPRESSION_1.png 3.157.900
PNG_STRATEGY_1_PNG_COMPRESSION_2.png 3.039.178
PNG_STRATEGY_1_PNG_COMPRESSION_3.png 2.904.732
PNG_STRATEGY_1_PNG_COMPRESSION_4.png 2.603.165
PNG_STRATEGY_1_PNG_COMPRESSION_5.png 2.566.294
PNG_STRATEGY_1_PNG_COMPRESSION_6.png 2.519.976
PNG_STRATEGY_1_PNG_COMPRESSION_7.png 2.515.584
PNG_STRATEGY_1_PNG_COMPRESSION_8.png 2.498.000
PNG_STRATEGY_1_PNG_COMPRESSION_9.png 2.475.941
PNG_STRATEGY_2_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_2_PNG_COMPRESSION_1.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_2.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_3.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_4.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_5.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_6.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_7.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_8.png 5.175.597
PNG_STRATEGY_2_PNG_COMPRESSION_9.png 5.175.597
PNG_STRATEGY_3_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_3_PNG_COMPRESSION_1.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_2.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_3.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_4.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_5.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_6.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_7.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_8.png 2.762.428
PNG_STRATEGY_3_PNG_COMPRESSION_9.png 2.762.428
PNG_STRATEGY_4_PNG_COMPRESSION_0.png 27.647.001
PNG_STRATEGY_4_PNG_COMPRESSION_1.png 3.642.295
PNG_STRATEGY_4_PNG_COMPRESSION_2.png 3.492.898
PNG_STRATEGY_4_PNG_COMPRESSION_3.png 3.347.030
PNG_STRATEGY_4_PNG_COMPRESSION_4.png 3.058.305
PNG_STRATEGY_4_PNG_COMPRESSION_5.png 2.988.217
PNG_STRATEGY_4_PNG_COMPRESSION_6.png 2.915.866
PNG_STRATEGY_4_PNG_COMPRESSION_7.png 2.904.503
PNG_STRATEGY_4_PNG_COMPRESSION_8.png 2.876.399
PNG_STRATEGY_4_PNG_COMPRESSION_9.png 2.849.642
EDIT: i tested both images (original and saved by OpenCV) in https://compress-or-die.com/analyze
only difference : original image's ColorType is Palette
and OpenCV's is RGB
i think the original image has only different tones of yellow and this is the reason for lesser size