对于一张二值图像而言,假如白色像素区域为目标像素区域,黑色像素为背景,用1表示白色,0表示黑色像素,则图像目标的形心求取公式如下:
其中x0,y0是质心坐标,f(x,y)是二值化图像在点(x,y)处的像素值
根据上面的公式,通过像素的遍历,利用Opencv可以写出一个函数,来求形心代码如下:
CvPoint GetCenterPoint(IplImage *src)
{
int i,j;
int x0=0,y0=0,sum=0;
CvPoint center;
CvScalar pixel;
for (i=0;i<src->width;i++)
for(j=0;j<src->height;j++)
{
pixel=cvGet2D(src,j,i);
if(pixel.val[0]==1)
{
x0=x0+i;
y0=y0+j;
sum=sum+1;
}
}
center.x=x0/sum;
center.y=y0/sum;
return center;
}
经测试效果如下:
完整代码下载:http://download.youkuaiyun.com/detail/gxiaob/5149306
参考资料:
http://blog.stevenwang.name/image-centroid-217001.html
http://bbs.sciencenet.cn/thread-531905-1-1.html
http://dongtingyueh.blog.163.com/blog/static/461945320126238303158/