opencv中关于cvtColor函数性能测试

在opencv中提供了cvtColor()函数,可以直接将彩色图像转换为灰度图。

下面讲解一下cvtColor()函数的具体参数:

在这里插入图片描述

第一个参数:输入一个图像
第二个参数: 输出一个图像
第三个参数:COLOR_BGR2GRAY(bgr——>gray)
第三个参数转到定义后还能看到可以填入的更多选项:
如:COLOR_BGR5652RGB:5位传B,6位传G,5位传R,这样数量会减小
COLOR_BGR5652RGBA:多在3D图像中使用,A是一个透明通道。

opencv中关于cvtColor函数性能测试_第1张图片

除了直接调用cvtColor()将图像转为灰度,我们自己也可以实现这个功能(如下面代码中的BGRToGray函数),并且将opencv中提供的cvtColor()函数和自己实现的函数,进行性能测试:

#include
#include

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;
}

运行结果如下:

opencv中关于cvtColor函数性能测试_第2张图片

opencv中关于cvtColor函数性能测试_第3张图片

结果分析如下:

  1. 直接调用opencv中提供的cvtColor()函数速度更快。
  2. 首次调用cvtColor()可能会启动一些东西,所以第二次调用时,速度明显加快。

你可能感兴趣的:(opencv,计算机视觉,图像处理)