【问题标题】:Calculation of contour's x,y-axis length计算轮廓的 x,y 轴长度
【发布时间】:2012-11-04 00:14:53
【问题描述】:

大家好。

我仍在使用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

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

...运行良好。但现在我想获取轮廓/对象的 x 轴和 y 轴的长度,如下所示:

问题是有什么函数可以计算轮廓的x轴和y轴长度吗?如果有,谁能给我一些线索怎么做? p>

提前致谢。干杯。

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

【问题讨论】:

  • 你看过这个吗?有帮助吗? stackoverflow.com/questions/9971162/…
  • 看起来很简单......只需遍历整个图像并注意标记为在轮廓上的像素的最小和最大 x 和 y 值。您的红色轮廓图像是如何生成的?
  • @Rook:我使用 cvDrawContours 作为红色轮廓。
  • @joey:我已经尝试过你给的链接中的 cvArcLength,但问题是它只能找到 x 轴长度而不能找到 Y 轴。顺便说一句,谢谢你的建议
  • 那么你甚至不需要检查图像;您只需遍历传入的 CvSeq 即可绘制轮廓并检查该序列中每个点的 x、y 值,对吗?

标签: c++ c image-processing opencv


【解决方案1】:

在我花了将近一天的时间在谷歌上搜索答案后,我终于找到了另一种获取对象宽度和高度的方法,即使用 cvBoundingRect 函数。基本上它会在轮廓周围形成一个直立的边界矩形,所以我只需要检索框的宽度和高度就可以得到我想要的。

代码:

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

顺便说一句,感谢您的所有帮助。干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2010-10-20
    • 2018-04-08
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多