其他分享
首页 > 其他分享> > 点到轮廓的距离

点到轮廓的距离

作者:互联网

点到轮廓的距离

简介

实现

OpenCV 4 提供了计算像素点距离轮廓最小距离的pointPolygonTest()函数

double cv::pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)

示例代码:

#include <opencv2/opencv.hpp>
#include <vector>
using namespace cv;
using namespace std;

int main()
{
    Mat img = imread("/home/kslas/OpenCV/regular.jpg");

    // 边缘检测
    Mat canny;
    Canny(img, canny, 80, 160, 3, false);
    // 膨胀运算
    Mat kernel = getStructuringElement(0, Size(3, 3));
    dilate(canny, canny, kernel);
    // 轮廓发现
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;
    findContours(canny, contours, hierarchy, 0, 2);

    // 创建图像中的一个像素点并绘制图形
    Point point = Point(50, 300);
    circle(img, point, 2, Scalar(0, 0, 255), 2);

    // 多边形
    for (int i = 0; i < contours.size(); i++)
    {
        // 用最小外接矩形求取轮廓中心
        RotatedRect rrect = minAreaRect(contours[i]);
        Point2f center = rrect.center;
        circle(img, center, 2, Scalar(0, 255, 0), 2);  // 绘制圆心点

        // 轮廓外部点距离轮廓的距离
        double dis = pointPolygonTest(contours[i], point, true);
        // 轮廓内部点距离轮廓的距离
        double dis2 = pointPolygonTest(contours[i], center, true);
        // 输出点结果
        cout << "外部点距离轮廓距离: " << dis << endl;
        cout << "内部点距离轮廓距离: " << dis2 << endl;
    }
    imshow("img", img);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

运行结果:

标签:距离,contours,返回值,canny,点到,轮廓,像素点
来源: https://www.cnblogs.com/TNTksals/p/15868978.html