1.介绍
如果使用过opencv,那么对于imread的基本使用应该是很清楚的,比如flags=1的时候,是读入彩色图片,flags=0的时候,是读入灰度图片。但遇到以下几种情况,我们又打算怎么处理呢?
第一种:读入的图片是非常大,比如8k图片,而我们只想粗糙的看下结果,如果直接imread进去,那么不仅速度非常慢,而且还占内存
第二种:想resize图片(往小的方向缩小),我们常用的方法是,先imread进原图,然后调用resize函数,那么有没有更好的方法呢?
第三种:遇到了再补充
2.代码
在代码实现中,我们主要是针对上面的第二种情况,能明白第二种情况就肯定能明白第一种情况。
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
double time0 = static_cast<double>(getTickCount());
Mat src0 = imread("big.jpg", IMREAD_REDUCED_COLOR_8);
time0 = ((double)getTickCount() - time0) / getTickFrequency();
cout << "读1/8图运行时间为:" << time0 << "秒" << endl;
imshow("src0", src0);
Mat dst1;
time0 = static_cast<double>(getTickCount());
Mat src1 = imread("big.jpg", 1);
resize(src1, dst1, Size(), 0.125, 0.125);
time0 = ((double)getTickCount() - time0) / getTickFrequency();
cout << "resize到1/8图运行时间为:" << time0 << "秒" << endl;
imshow("dst1", dst1);
waitKey(0);
return 0;
}
在Debug的情况下:
在Release的情况下: