opencv图像灰度重心算法

原文:http://blog.csdn.net/moses1213/article/details/44679603

导师交给的项目,其中一步就是求光斑的重心,网上有很多关于重心的代码,大体是利用cvFindContour函数找出图像的轮廓,然后将图像阈值分割,二值化处理。这样处理后图像的灰度值只有0和1两个值,丢失了很多灰度信息,这样找出来的重心实际上是轮廓几何图形的形心,灰度值的影响并没有反应出来。

  下面介绍一下灰度重心法:

  对于亮度不均与的目标,灰度重心法可按目标光强分布求出光强权重质心坐标作为跟踪点,也叫密度质心算法。对于衣服M*N大小的图像f,像素的灰度值凡超过阈值T的均参与重心处理,于是重心坐标为:




Xi表示第i行的坐标,Xj表示第j行的坐标,f(i,j)表示第i行第j列的像素值。

  1. CvPoint grayCenter(IplImage* TheImage)  
  2. {  
  3.     //灰度重心法求质心  
  4.     CvPoint Center;  
  5.     int i, j;  
  6.     CvScalar cs = cvSum(TheImage);  
  7.     Center.x = Center.y = 0;  
  8.     double x = 0;  
  9.     double y = 0;  
  10.     for(i = 0;i < TheImage->width;i++)  
  11.     {  
  12.         for(j = 0; j < TheImage->height;j++)  
  13.         {  
  14.             CvScalar s = cvGet2D(TheImage, j,i);  
  15.             x += i*s.val[0]/cs.val[0];  
  16.             y += j*s.val[0]/cs.val[0];  
  17.         }  
  18.     }  
  19.     Center.x = cvRound(x);  
  20.     Center.y = cvRound(y);  
  21.   
  22.     return Center;  

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值