图像的二值化和灰度化

19 篇文章 0 订阅
2 篇文章 0 订阅

原作者:timidsmile



  图像的二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。

  将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。

  所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域

一下程序可以实现图像的二值化:

[cpp]  view plain  copy
  1. /************************************** 
  2. * 
  3. *   函数名: 
  4. *           cvBinaryEx 
  5. *   参 数: 
  6. *           imgSrc  - 进行锐化的图像 
  7. *   返回值: 
  8. *           成功锐化返回TRUE,否则返回false; 
  9. *   说 明: 
  10. *    
  11. *           对图进行二值化 
  12. * 
  13. ************************************/  
  14. bool cvBinaryEx(IplImage *imgSrc)  
  15. {  
  16.     IplImage* img = cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,imgSrc->nChannels);  
  17.     CvScalar s;  
  18.     int sum=0;  
  19.     for (int i=0; i < imgSrc->height; i++)  
  20.     {  
  21.         for (int j=0; j < imgSrc->width; j++)  
  22.         {  
  23.             s =  cvGet2D(imgSrc,i,j);  
  24.             sum = (s.val[0]+s.val[1]+s.val[2])/3;  
  25.   
  26.   
  27.             if (sum > 128)  
  28.             {  
  29.                 s.val[0]=s.val[1]=s.val[2]=255;  
  30.                 cvSet2D(imgSrc,i,j,s);  
  31.             }  
  32.             else  
  33.             {  
  34.                 s.val[0]=s.val[1]=s.val[2]=0;  
  35.                 cvSet2D(imgSrc,i,j,s);  
  36.         }  
  37.         }  
  38.     }  
  39.   
  40.     return true;  
  41. }  

灰度图grayscale

灰度是指只含亮度信息,不含色彩信息的图像。黑白照片就是灰度图,特点是亮度由暗到明,变化是连续的。要表示灰度图,就需要把亮度值进行量化

使用灰度图的好处:

①     RGB的值都一样。

②     图像数据即调色板索引值,就是实际的RGB值,也就是亮度值。

③     因为是256色调色板,所以图像数据中一个字节代表一个像素,很整齐。

所以,做图像处理时都采用灰度图

将一幅RGB格式的图像转化为灰度图:

[cpp]  view plain  copy
  1. <strong><span style="font-family:'Microsoft YaHei';font-size:18px;color:#333333;">IplImage *src= cvLoadImage("C:\\home.bmp", -1);  
  2.   
  3. IplImage *dest ;  
  4.   
  5. cvCvtColor(Src, dest, CV_RGB2GRAY);</span></strong>  

然后将灰度图dest转化为二值化图像(保存在src中),可以直接使用cvThreshold函数:

[cpp]  view plain  copy
  1. <strong><span style="font-family:'Microsoft YaHei';font-size:18px;color:#333333;">cvThreshold(dest, src, 1, 255, CV_THRESH_BINARY); </span><span style="font-family:'Microsoft YaHei';">  
  2. </span></strong>  

一般先将图像灰度化,然后再二值化,然后在进行边缘处理等操作。。。




灰度化-->二值化--->边缘提取>>>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值