为旋转的物体绘制边界框

3
我有一个视频流,其中的物体(盒子)可以朝任何方向和任何姿态移动。我想跟踪每个物体。所以这是我做的事情:
1)找到了物体的轮廓
2)在物体周围画出了边界框。
3)计算边界框的质心并跟踪物体。
所有这些都很好。但是当物体旋转或处于其他姿势时,边界框的质心并不完全等于物体的中心。
我希望边界框也能旋转并适应盒子的形状。当发生这种情况时,边界框的中心就等于物体的中心。这也将提高我的跟踪精度。
请参见附图:
如果边界框不是解决方案,是否有任何其他方法可以找到物体的中心?
我的物体始终是盒子形状,而且只有物体的顶部表面在视频流中可见。

enter image description here


2
你所拥有的是一个轴对齐包围盒(AABB),而你想要的是一个定向包围盒(OBB)。使用这些关键词,你应该能够找到你需要的一切。 - UnholySheep
2个回答

2

以下是来自OpenCV文档这里的内容:

// 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]) );
}

1
一旦您拥有轮廓,就可以使用moments函数。这将直接给出质心,而无需使用边界框。
 cv::Moments mu = moments(box_contour, false);
 cv::Point2f centroid = Point2f( mu.m10/mu.m00 , mu.m01/mu.m00 ); 

更详细的例子在这里

对C++不是很熟练(通常使用Python中的openCV),但应该看起来差不多:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接