【问题标题】:Turn a Rect into one central point将 Rect 变成一个中心点
【发布时间】:2015-04-03 15:31:03
【问题描述】:

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

我意识到这样做的最好方法可能是找到Rect的四个角的坐标,然后取平均x和平均y-坐标来找到中心点的坐标.但是,我不确定如何执行此操作。是否有一些功能可以让我直接访问 OpenCV 的 Rect 坐标?

【问题讨论】:

    标签: java opencv


    【解决方案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}
    

    旧答案:

    [使用rect的方法:

    tl ()
    br ()
    

    分别获取左上角和右下角。]

    如果您确实想使用 tl, br 方法,您可以这样做:

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

    【讨论】:

    • 但是我如何从这些中找到中心点呢?似乎+ 运算符不允许与tlbr 一起使用...
    • afaik "+" 允许用于 cv::Point 但可能不允许使用 "/"。试试 0.5f*(rect.tl() + rect.br())
    • 在我的手机上,所以我无法验证,但你应该能够做到:Point centroid = new Point(0.5*(rect.br() + rect.tl()))跨度>
    • 你也可以这样做:rect.x, rect.y, rect.width, rect.height 来抓取矩形的字段并做算术。
    • @Micka 当我尝试添加两个点时出现此错误“对于参数类型 org.opencv.core.Point、org.opencv.core.Point,运算符 + 未定义"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2013-05-20
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多