目录:
1.clock();
2.getTickCount();
1.c/c++提供的clokc()函数
**· **clock_t clock (void);
**· **引用头文件:#inlcude<time.h> /
**· **函数返回值类型:clock_t ,参数为空;
使用前 可以先定义两个clock_t类型的变量,如:clock_t begin ,end;
然后分别用这两个变量记录调用函数前后的clock()
最后cout输出,输出时应注意以下几点:
- 在(end - begin) 后 ,需要除上 CLOCKS_PER_SEC * 1000,这样算出来就是毫秒;
- 由于变量类型是clock_t ,所以还需要强制转换为float/double;
下面见代码示例:
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
void BGRToGray(Mat &src, Mat &dest)
{
dest.create(src.rows,src.cols, CV_8UC1);
for (int r = 0; r < src.rows; r++)
{
for (int c = 0; c < src.cols; c++)
{
Vec3b & m = src.at<Vec3b>(r, c);
int gray = (m[2] * 30 + m[1] * 59 + m[0] * 11 + 50) / 100;
dest.at<uchar>(r, c) = gray;
}
}
}
int main()
{
Mat src = imread("D:\\photogallery\\人物\\image_11.jpg");
Mat grayimg;
clock_t begin1, end1,begin2,end2,begin3,end3;
begin1 = clock();
cvtColor(src, grayimg, COLOR_BGR2GRAY);
end1 = clock();
begin2 = clock();
cvtColor(src, grayimg, COLOR_BGR2GRAY);
end2 = clock();
begin3 = clock();
Mat mygray;
BGRToGray(src, mygray);
end3 = clock();
//有问题请检查这行代码
cout << "所用时间:" << double(end1 - begin1) / CLOCKS_PER_SEC * 1000 << "ms" << endl;
cout << "所用时间:" << double(end2 - begin2) / CLOCKS_PER_SEC * 1000 << "ms" << endl;
cout << "所用时间:" << double(end3 - begin3) / CLOCKS_PER_SEC * 1000 << "ms" << endl;
namedWindow("src");
namedWindow("gray");
namedWindow("mygray");
imshow("src", src);
imshow("gray", grayimg);
imshow("mygray", mygray);
waitKey(0);
return 0;
}
运行结果如图:
2.Windows/opencv提供的getTickCount()函数;
**· **long long getTickCount (void);
**· **无需引用额外的头文件;
**· **函数返回值类型:long long ,参数为空;
使用时可以和上面clock()函数的使用方式一致,只需要把函数换一下即可,在这里就不展示了;这里给出一种函数的写法。
赋值时应注意以下几点:
在(current - last)后 ,需要除上 getTickFrequency();
由于变量类型是long long ,所以还需要强制转换为float/double;
最后再*1000,这样算出来就是毫秒;
具体使用如下:
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
//计时函数
void PrintMs(const char*text = "")
{
static long long last = 0;
long long current = getTickCount();
if (last == 0)
{
last = current;
return;
}
long long ms = 0;
ms = ((double)(current - last) / getTickFrequency()) * 1000;//最容易出问题的一行代码
if (*text != 0)
{
cout << ms << " ms" << endl;
}
last = getTickCount();
}
//自己的转灰度函数
void BGRToGray(Mat &src, Mat &dest)
{
dest.create(src.rows,src.cols, CV_8UC1);
for (int r = 0; r < src.rows; r++)
{
for (int c = 0; c < src.cols; c++)
{
Vec3b & m = src.at<Vec3b>(r, c);
int gray = (m[2] * 30 + m[1] * 59 + m[0] * 11 + 50) / 100;
dest.at<uchar>(r, c) = gray;
}
}
}
int main()
{
Mat src = imread("D:\\photogallery\\人物\\image_11.jpg");
Mat grayimg;
PrintMs("");
cvtColor(src, grayimg, COLOR_BGR2GRAY);
cout << "第一次cvtColor所耗时间:";
PrintMs("cvtColor");
cvtColor(src, grayimg, COLOR_BGR2GRAY);
cout << "第二次cvtColor所耗时间:";
PrintMs("cvtColor");
Mat mygray;
BGRToGray(src, mygray);
cout << "BGRToGray所耗时间:";
PrintMs("BGRToGray");
namedWindow("src");
namedWindow("gray");
namedWindow("mygray");
imshow("src", src);
imshow("gray", grayimg);
imshow("mygray", mygray);
waitKey(0);
return 0;
}
运行结果如图:
有任何疑问欢迎在评论区留言。