2012-11-15 225 views
1

大家好日子。计算轮廓的x,y轴长度

我仍然在使用the same old program,到目前为止,我设法根据轮廓的瞬间计算找到最大轮廓的面积和坐标。

double m_00 = cvGetSpatialMoment(&moments, 0, 0); //The area 
double m_10 = cvGetSpatialMoment(&moments, 1, 0); 
double m_01 = cvGetSpatialMoment(&moments, 0, 1); 
float gravityX = (m_10/m_00);  //center of x-axis    
float gravityY = (m_01/m_00);  //center of y-axis 

...和我所得到的是这样的:

The screenshot

...这是工作很好。但现在我想x轴和轮廓/对象的y轴的长度是这样的:

What I need

问题是是有可以计算X任何功能轮廓的轴和y轴长度?如果是这样,任何人都可以给我一些线索如何做到这一点?

在此先感谢。干杯。

P/S:The program我上面链接的是旧的,所以它有一些错误。

+0

你见过这个吗?它有帮助吗? http://stackoverflow.com/questions/9971162/i-have-prob-with-this-coding-related-to-find-the-contours –

+0

似乎相当直接...只是遍历整个图像,并注意到被标记为在轮廓上的像素的最小和最大x和y值。您的红色轮廓图像是如何生成的? – Rook

+0

@Rook:我使用cvDrawContours作为红色轮廓。 –

回答

0

我花了差不多一天的时间围绕谷歌搜索答案,终于找到了一种替代方法来获取对象的宽度和高度,这是通过使用 cvBoundingRect函数。基本上它会在轮廓周围形成一个直立的矩形框,所以我只需要检索框的宽度和高度即可获得我想要的效果。

代码:

Rect rect= cvBoundingRect(contour,0); 
    double pt1, pt2; 
    pt1 =rect.width;  //width 
    pt2 =rect.height;  //heigth 

BTW感谢你的帮助。干杯。