2015-04-03 27 views
0

我目前使用OpenCV创建一个检测车辆是否位于特定区域的系统。到目前为止,我已经到了在每辆车周围绘制Rect的地步。我的下一步是找出这些矩形的中心点,看看它是否属于特定的区域。将矩形切换为一个中心点

我意识到这样做的最好的方法可能找到Rect的四个角落的坐标,然后取平均值x平均y - 协调找到中心点坐标。但是,我不知道如何做到这一点。有没有让我直接访问OpenCV的Rect坐标的功能?

回答

1

编辑原文:正如我们指出的,我们不能直接在tl()和br()上使用'+'运算符。

使用此,而不是得到一个矩形的中心:

Point p1 = new Point(100, 100); 
Point p2 = new Point(600, 800); 
Rect myrect = new Rect(p1, p2); 
System.out.println(String.format("Rectangle: %s", myrect)); 

Point centroid = new Point(myrect.x + 0.5*(myrect.width), myrect.y + 0.5*(myrect.height)); 
System.out.println(String.format("centroid: %s", centroid)); 

此打印:

Rectangle: {100, 100, 500x700} 
centroid: {350.0, 450.0} 

老答案:

[使用矩形的方法:

tl() 
br() 

获得顶级乐FT和右下点,分别]

如果你确实想使用TL,你可以做BR方法:

Point anotherCentroid = new Point(0.5 * (myrect.br().x + myrect.tl().x), 0.5 * (myrect.br().y + myrect.tl().y)); 
+0

辉煌。谢谢! – Zetland 2015-04-03 15:55:28

+0

但我如何从这些中找到中心点?似乎'+'运算符不允许与'tl'和'br'一起使用... – Zetland 2015-04-03 16:15:18

+0

afaik cv :: Point允许使用“+”,但可能不允许使用“/”。尝试0.5f *(rect.tl()+ rect.br()) – Micka 2015-04-03 16:30:27