做项目的时候有个需求:每次计算保存一个结果图片,往前测试和使用的时候数据量都比较小顶多十几个,今天稍微加大了点数据,发现到五十几个的时候就卡成了PPT,这里记录一下问题排查和解决的途径。
查看保存图片的属性,可以看到图片的质量是比较高的
这个图片的分辨率是2448x2048的,也就是摄像头传回来的原始分辨率,每张图达到了恐怖的14MB,这样100张图下来就一1G多,非常消耗空间,但是在查看结果的时候多是偏向查看数据,图片不需要这么清晰,而且我们放结果图片的控件大小是800x500,所以这是浪费!
那么,第一个提高效率的方法就是降低图片质量。
resPixVec.push_back(Tools::cvtQPixmap(matchMap,QImage::Format_BGR888).scaled(QSize(612,512),Qt::KeepAspectRatio));
上面那个方法终究是治标不治本的,再看代码,发现一个大问题,之前的存图逻辑是:把所有计算的结果图像存到一个QMap
里,然后每次添加或者删除之后先对这个map进行操作,然后重新保存图片。
这哪行啊,一个图片有这么多个像素,然后每次计算都要进行这么多的存图操作,效率肯定出问题。
解决方案:
给每个图片一个唯一的id,Qt中使用唯一id即uuid的方法:
QUuid uuid = QUuid::createUuid();
QString strUUId = uuid.toString().remove("{").remove("}").remove("-").toUpper();
然后直接通过这个uuid对图片文件进行操作,算是彻底解决了这个问题。