opencv中关于cvtColor函数性能测试

本文探讨了在OpenCV中使用cvtColor()函数将彩色图像转换为灰度图的方法,并与自定义实现的BGRToGray函数进行了性能比较。实验结果显示,cvtColor()函数在速度上更胜一筹,尤其是经过首次调用后的连续调用。此外,还展示了如何使用这两个函数并将结果进行显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

运行结果如下:

在这里插入图片描述

在这里插入图片描述

结果分析如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值