【问题标题】:How to use boost::geometry::distance with opencv cv::Point?如何将 boost::geometry::distance 与 opencv cv::Point 一起使用?
【发布时间】:2015-12-08 16:42:34
【问题描述】:
typedef boost::geometry::model::d2::point_xy<double> boostPoint;

如何在不转换为 boostPoint 的情况下将 boost::geometry::distance 与 opencv cv::Point 一起使用?

double EuclideanDistance(const cv::Point2d &pt1, const cv::Point2d &pt2)
{
    boostPoint boostPt1(pt1.x, pt1.y);
    boostPoint boostPt2(pt2.x, pt2.y);

    double distance= boost::geometry::distance(boostPt1, boostPt2);

    return distance;
}

更新:

我试过这段代码,但它向xerror: ‘x’ has not been declared抱怨

BOOST_GEOMETRY_REGISTER_POINT_2D(cv::Point2d, double, boost::geometry::cs::cartesian, x, y)

【问题讨论】:

标签: c++ opencv boost wrapper boost-geometry


【解决方案1】:

确保包含doc 所指示的必要标题:

#include <boost/geometry/geometries/register/point.hpp>

【讨论】:

    【解决方案2】:

    如果你想让代码更优雅,就用对的方式。如果您添加到代码中,Boost 不是优势。由于您的点是 OpenCV 点,因此使用 OpenCV 计算距离,如下所示:

    double EuclideanDistance(const cv::Point2d &pt1, const cv::Point2d &pt2)
    {
        return cv::norm(pt1-pt2,cv::NORM_L2);
    }
    

    编辑:

    既然 OP 需要这样做,我可能会建议这个解决方案:创建你自己的 Point Class 让我们称之为MyPoint。在MyPoint 中定义复制构造函数和与cv::PointboostPoint 之间的对话。在您的代码中,只需在任何地方使用YourPoint。如果您在执行此操作时需要帮助,请发表评论。

    【讨论】:

    • EuclideanDistance 只是一个简单的例子,我需要将其他 boost::geometry 算法与 cv::Point 一起使用。
    • 这不是在回答操作问题。 boost::geometry 可以通过一些模板魔法与任何库的任何原语一起工作。 cv::Points 可以直接使用,无需昂贵的数据复制。问题是如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2019-05-23
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多