簡體   English   中英

如何在 opencv cv::Point 中使用 boost::geometry::distance?

[英]How to use boost::geometry::distance with opencv cv::Point?

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;
}

更新:

我試過這段代碼,但它抱怨x error: 'x' has not been declared

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

確保包含文檔指示的必要標題:

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

如果你想讓代碼更優雅,只需使用正確的方法。 如果您添加到代碼中,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 如果您需要幫助來實現這個只是評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM