一个很有用的测试图像处理运行耗时的方法为
实际运行效果(取10次的平均值):
double duration;
duration = static_cast<double>(cv::getTickCount());
colorReduce(image); // the function to be tested
duration = static_cast<double>(cv::getTickCount())-duration;
duration /= cv::getTickFrequency(); // the elapsed time in s
其中duration结果可以是多次调用函数colorReduce后的平均值,注意到函数getTickFrequency()是将tick转换成秒,而不是毫秒!
那么接下来就测试一下几种函数实现同意功能的不同运行耗时:
测试函数:
double duration = static_cast<double>(getTickCount());
for (int i=0 ; i<10 ; i++){
colorReduce2(img,64);
}
duration = static_cast<double>(getTickCount())-duration ;
duration *=1000;//转换成ms
duration /=(getTickFrequency()*10);
cout<<"共耗时 : "<<duration<<" ms"<<endl;
函数一:
void colorReduce1(Mat &image , int factor)//行指针扫描方式,据官方文档说是最快的方式
{
int colLength = image.cols*image.channels();
for(int i=0; i<image.rows ; i++){
uchar *data = image.ptr<uchar>(i);//得到每一行的起始地址
for(int j=0; j< colLength; j++){
data[j] = data[j]/factor * factor + factor/2;
}
}
}
实际运行效果(取10次的平均值):
函数二: