【问题标题】:Find distance from contour to a Point opencv C++查找从轮廓到点的距离 opencv C++
【发布时间】:2017-04-20 10:33:42
【问题描述】:

我将创建一个矩阵,该矩阵在列 [i] 中具有从固定点(轮廓的质心 (mc(i)))到轮廓 [i] 的点的距离。

这是我找到轮廓和质心的代码:

findContours(binMat, contours, cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE,Point(0,0));

/// Get the moments
vector<Moments> mu(contours.size());
for (int i = 0; i < contours.size(); i++)
{
    mu[i] = moments(contours[i], false);
}

///  Get the mass centers
vector<Point2f> mc(contours.size());
for (int i = 0; i < contours.size(); i++)
{
    mc[i] = Point2d(mu[i].m10 / mu[i].m00, mu[i].m01 / mu[i].m00);
}

这段代码运行良好。

接下来,我尝试了很多方法来找到距离,但是遇到了很多问题,因为我是使用 C++ 和 OpenCV 编程的新手。

【问题讨论】:

    标签: c++ opencv point contour imaging


    【解决方案1】:
    for (int i = 0; i < contours.size(); i++)
    {
        mc[i] = Point2d(mu[i].m10 / mu[i].m00, mu[i].m01 / mu[i].m00);
    
        KeyPoint k;
        k.pt = mc[i];
    
        float d = (k.pt.x,k.pt.y, centerX,centerY);
    }
    

    计算两点距离的函数

    float distance(int x1, int y1, int x2, int y2)
    {
    
        float d = sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2));
    
        return d;
    }
    

    【讨论】:

    • 谢谢易卜拉欣!!您的建议很有用,我通过这种方式解决了问题:vector&lt;Point2f&gt; mc(contours.size()); raggio.resize(contours.size()); for (int i = 0; i &lt; contours.size(); i++) { mc[i] = Point2d(mu[i].m10 / mu[i].m00, mu[i].m01 / mu[i].m00); KeyPoint center; center.pt = mc[i]; raggio[i].resize(contours[i].size()); for (int j = 0; j &lt; contours[i].size(); j++) { KeyPoint k; k.pt = contours[i][j]; float d = distance((int)center.pt.x, (int)center.pt.y, (int)k.pt.x, (int)k.pt.y); raggio[i][j] = d; } }
    【解决方案2】:

    openCV 中有一个函数可以解决这个问题; pointPolygonTest.

    【讨论】:

    • 感谢 Aidenhjj 的快速回复!我已经尝试过该功能并且它有效,但我需要知道从轮廓的每个点到质心的所有距离!相反,此函数仅返回距轮廓最近点的距离。
    • 所以只需获取每个点的 x 和 y 属性并减去中心 x 和 y,然后使用良好的旧毕达哥拉斯求距离。
    • 这就是重点!我已经在 Matlab 上完成了这个项目,在那里我使用了“好旧的毕达哥拉斯”:) 事实是我不知道如何获得 x 和 y 属性,因为这是我第一次用 C++/openCV 编程!
    • 我认为如果你遍历轮廓向量,你应该得到 openCV Points。要访问 x 和 y 属性,只需执行 pt.xpt.y。但我一直使用 Python API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2012-11-06
    • 2012-02-25
    相关资源
    最近更新 更多