【问题标题】:Drawing Bounding Box for a rotated object为旋转对象绘制边界框
【发布时间】:2017-03-17 04:29:26
【问题描述】:

我有一个视频流,其中对象(框)以任何方向和任何姿势移动。我想跟踪每一个对象。所以这就是我所做的:

1) 我找到了物体的轮廓

2) 在对象周围绘制有界框。

3) 计算边界框的质心并跟踪对象。

所有这些都很好。但是当物体旋转或处于其他姿势时,有界框的质心并不完全等于物体的中心。

我希望有界框也可以旋转并适合框的形状。当这种情况发生时,有界框的中心等于对象的中心。这也将提高我的跟踪准确性。

见附图:

如果有界框不是解决方案,有什么方法可以找到对象的中心

我的对象总是盒形的,而且在视频流中也只能看到对象的顶面。

【问题讨论】:

  • 您拥有的是一个Axis-Aligned Bounding Box (AABB),而您想要的是一个Oriented Bounding Box (OBB)。使用这些关键字,您应该能够找到所需的一切

标签: c++ opencv bounding-box


【解决方案1】:

来自 OpenCV 文档here

// contours : is your blobs found before
// Create a vector to store your rotated rectangles
vector<RotatedRect> minRect( contours.size() );

// in a for loop find rotated rectangles for each blob 
for( int i = 0; i < contours.size(); i++ )
{ 
    // minAreaRect() function is for finding Rotated Rectangles
    minRect[i] = minAreaRect( Mat(contours[i]) );
}

【讨论】:

    【解决方案2】:

    一旦你有了你的轮廓,你就可以使用moments 函数。这将直接为您提供质心,而不必使用边界框。

     cv::Moments mu = moments(box_contour, false);
     cv::Point2f centroid = Point2f( mu.m10/mu.m00 , mu.m01/mu.m00 ); 
    

    更详细的例子here

    对 C++ 没有超级经验(通常在 Python 中使用 openCV),但应该看起来像这样 :)

    【讨论】:

      猜你喜欢
      • 2018-05-08
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      相关资源
      最近更新 更多