• OpenCV:直线拟合——cv::fitLine()详解


    实现目的:有一系列的点,需要拟合出一条直线。

    cv::fitLine()的具体调用形式如下:

    void cv::fitLine(  
        cv::InputArray points, // 二维点的数组或vector  
        cv::OutputArray line, // 输出直线,Vec4f (2d)或Vec6f (3d)的vector  
        int distType, // 距离类型  
        double param, // 距离参数  
        double reps, // 径向的精度参数  表示直线到原点距离的精度,建议取 0.01。设为0,则自动选用最优值
        double aeps // 角度精度参数  表示直线角度的精度,建议取 0.01
    ); 

    计算出的直线信息存放在 line 中,为 cv::Vec4f 类型。line[0]、line[1] 存放的是直线的方向向量,double cos_theta = line[0]; double sin_theta = line[1];。line[2]、line[3] 存放的是直线上一个点的坐标。

    还不太理解输出的直线,为什么要用这种类型。可以避免得到竖直直线,斜率无法显示么?

    如果在图中画出直线,会用到cv::line(image, point1, point2, cv::Scalar(0, 255, 0), 2, 8, 0);因此,需要输入直线上的两个点,才能画出直线。

        double cos_theta = line[0];
        double sin_theta = line[1];
        double x0 = line[2], y0 = line[3];
    
        double k = sin_theta / cos_theta;
        double b = y0 - k * x0;
    
        double x = 0;
        double y = k * x + b;
    
        cv::line(image, Point(x0,y0), Point(x,y), cv::Scalar(255), 1);
  • 相关阅读:
    web fileReader API
    placeholer 改变颜色
    在选择标签中遇到的问题
    选择标签
    cesh
    sui 无限下拉分页
    调用百度地图 API 移动地图时 maker 始终在地图中间 并根据maker 经纬度 返回地址
    两种轮播图实现方式
    CSS多行文本溢出省略显示
    从Python看Web架构的发展
  • 原文地址:https://www.cnblogs.com/supercxm/p/8483776.html
Copyright © 2020-2023  润新知