采集自然是简单粗暴的imwrite
测试程序如下:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
for (int i = 0; i < 500; ++i) {
Mat image = imread(std::to_string(i) + ".png");
Mat image2 = imread(std::to_string(i) + ".bmp");
int num = 0;
for (int i = 0; i < image.total()*3 ; ++i)num += abs(image.data[i] - image2.data[i]);
std::cout << num << std::endl;
}
system("pause");
return 0;
}
结论:
1.png和bmp无损,bmp大小是png的三倍
2.jpg/jpeg有损,默认参数下png大小是jpg/jpeg的二到三倍
imwrite设置成“无损后”,大小翻倍,但并没有达到无损的程度,和bmp按逐像素对比还是有很大的不同
设置方式:
vector< int >params = { CV_IMWRITE_JPEG_QUALITY,100 };
imwrite(name, color, params);
所以还是老老实实png吧,2333