图像验证码识别(四)——灰度化和二值化

一、灰度化

灰度化应用很广,而且也比较简单。灰度图就是将白与黑中间的颜色等分为若干等级,绝大多数位256阶。在RGB模型种,黑色(R=G=B=0)与白色(R=G=B=255),那么256阶的灰度划分就是R=G=B=i,其中i取0到255.

从前面可以知道,OpenCV读取图片之后图像的颜色数据矩阵默认是3通道的,也就是RGB模型,所以每个pixel都有3个分量,分别代表r,g和b的值。因此将三个分量值都改为同一个灰度值,图片就实现灰度化。

灰度化的方法一般有以下几种:

1. 分量法 

在rgb三个分量种按照需求选取一个分量作为灰度值

2. 最大值 

选取rgb的最大值作为该pixel的灰度值

3. 平均值 

g[i,j] = (r[i,j] + g[i,j] + b[i,j]) / 3,取rgb的平均值作为灰度值

4. 加权变换 

由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。

g[i,j] = 0.3*r[i,j] + 0.59*g[i,j] + 0.11*b[i,j]

而OpenCV提供了灰度化的API,这里就直接调用了,采用的是加权变换的方法.

[cpp]  view plain  copy
  1. void Image::toGray()  
  2. {  
  3.     Mat iGray;  
  4.     if (getChannel() == 3)  
  5.     {  
  6.         std::cout << "width : " << getWidth() << std::endl;  
  7.         std::cout << "height: " << getHeight() << std::endl;  
  8.         cvtColor(m_Mat,iGray,COLOR_BGR2GRAY);  
  9.         m_Mat = iGray;  
  10.         std::cout << "The file has been converted to gray map successfully" << std::endl;  
  11.         std::cout << "***********************************" << std::endl;  
  12.     }  
  13.     else  
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值