计时函数
1、getTickCount()函数返回CPU自某个事件以来走过的时钟周期数
2、getTickFreQuency()函数返回CPU一秒钟所走过的时钟周期数。
实例如下:
double time0=static_cast(getTickCount());//记录起始时间
//进行图像处理操作。。。。。。
time0=((double)getTickCount()-time0)/getTickFrequency();
cout<<”此方法运行时间是”<
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
void colorReduce(Mat& inputImage, Mat& outputImage, int div);
//用指针访问像素
void colorReduce(Mat& inputImage, Mat& outputImage, int div)
{
outputImage=inputImage.clone();//复制实参到临时变量
int rowNumber=outputImage.rows;
int colNumber=outputImage.cols*outputImage.channels();
//列数*通道数=每一行元素的个数
for(int i=0;i<rowNumber;i++)
{
uchar* data=outputImage.ptr<uchar>(i);//获取第i行的首地址
for(int j=0;j<colNumber;j++)
{
data[j]=data[j]/div*div+div/2;
}
}
}
/*
//用迭代器操作像素
void colorReduce(Mat& inputImage, Mat& outputImage, int div)
{
outputImage=inputImage.clone();
//获取迭代器
Mat_<Vec3b>::iterator it=outputImage.begin<Vec3b>();
Mat_<Vec3b>::iterator itend=outputImage.end<Vec3b>();
//存取彩色图像像素
for(;it!=itend;++it)
{
(*it)[0]=(*it)[0]/div*div+div/2;
(*it)[1]=(*it)[1]/div*div+div/2;
(*it)[2]=(*it)[2]/div*div+div/2;
}
}
*/
/*
//动态地址计算
void colorReduce(Mat& inputImage, Mat& outputImage, int div)
{
outputImage = inputImage.clone();
int rowNumber = outputImage.rows;
int colNumber = outputImage.cols;
for (int i = 0; i<rowNumber; i++)
{
for (int j = 0; j<colNumber; j++)
{
outputImage.at<Vec3b>(i, j)[0] = outputImage.at<Vec3b>(i, j)[0] / div*div + div / 2;//蓝色通道
outputImage.at<Vec3b>(i, j)[1] = outputImage.at<Vec3b>(i, j)[1] / div*div + div / 2;//绿色通道
outputImage.at<Vec3b>(i, j)[2] = outputImage.at<Vec3b>(i, j)[2] / div*div + div / 2;//红素通道
}
}
}
*/
int main()
{
//创建原始图并显示
Mat srcImage = imread("1.jpg");
imshow("原始图像", srcImage);
//按原图的参数规格来创建效果图
Mat dstImage;
dstImage.create(srcImage.cols, srcImage.rows, srcImage.type());
//记录起始时间
double time0 = static_cast<double>(getTickCount());
colorReduce(srcImage,dstImage,32);
time0 = ((double)getTickCount() - time0) / getTickFrequency();
cout << "此方法运行时间是" << time0 << "秒" << endl;
imshow("【效果图】", dstImage);
waitKey(0);
}