[openCV学习]openCV函数cvtColor()中转为灰度图的背后数学理论

  • **图像处理中,经常会用到这个函数,现在让我们先看看这个函数的源码**

'''
template<typename _Tp> struct RGB2Gray
{    
	typedef _Tp channel_type;    
	RGB2Gray(int _srccn, int blueIdx, const float* _coeffs) : srccn(_srccn)    
	{        
		static const float coeffs0[] = { 0.299f, 0.587f, 0.114f };        
		memcpy( coeffs, _coeffs ? _coeffs : coeffs0, 3*sizeof(coeffs[0]) );        
		if(blueIdx == 0)            
			std::swap(coeffs[0], coeffs[2]);    
	}    
	void operator()(const _Tp* src, _Tp* dst, int n) const    
	{        
	int scn = srccn;        
	float cb = coeffs[0], cg = coeffs[1], cr = coeffs[2];        
	for(int i = 0; i < n; i++, src += scn)            
		dst[i] = saturate_cast<_Tp>(src[0]*cb + src[1]*cg + src[2]*cr);    
	}    
	int srccn;    
	float coeffs[3];
};
'''


由上面的代码可以看得出来,我们的代码实现方法之一用的是公式:


有公式可知,B通道的分量占比最大,还有一种做法是直接把三个通道的数据叠加起来。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值