c++ opencv fitLine函数拟合直线

c++ opencv fitLine函数拟合直线

fitLine 函数

void fitLine( InputArray points, OutputArray line, int distType,
double param, double reps, double aeps );

points 积分: 2D 或 3D 点的输入向量,存储在 std::vector<> 或Mat中。
line 线: 输出线参数。在 2D 拟合的情况下,它应该是 4 个元素的向量(如 Vec4f) - (vx, vy, x0, y0),其中 (vx, vy) 是与直线共线的归一化向量, (x0, y0) 是线上的一个点。在 3D 拟合的情况下,它应该是 6 个元素的向量(如 Vec6f) - (vx, vy, vz, x0, y0, z0),其中 (vx, vy, vz) 是与直线共线的归一化向量,并且(x0, y0, z0) 是线上的一个点。
distType: M 估计器使用的距离,请参阅DistanceTypes
param 参数: 某些类型的距离的数值参数 ( C )。如果为 0,则选择最优值。
reps 代表: 足够的半径精度(坐标原点和直线之间的距离)。
aeps: 角度足够精确。对于 reps 和 aeps 来说,0.01 是一个很好的默认值。

opencv函数说明链接: https://docs.opencv.org/4.5.4/d3/dc0/group__imgproc__shape.html#gaf849da1fdafa67ee84b1e9a23b93f91f

拟合直线下面展示一些 内联代码片

	//2D返回的参数  Vec4f - (vx, vy, x0, y0)
	//(vx, vy) 是直线的方向向量
	//(x0, y0) 是直线的中心点坐标
    cv::Vec4f ret_fitLine;
    cv::fitLine(output_points, ret_fitLine, cv::DIST_L2, 0, 0.01, 0.01);

    // y = k * x + b    x = (y - b) / k;
    // b = y - k * x;   
    float k = ret_fitLine[1] / ret_fitLine[0];
    float b = ret_fitLine[3] - (k * ret_fitLine[2]);
    //线段起点x
    int x1 = line_start_p_x;
    int y1 = k * line_start_p_x + b;
    //线段终点x
    int x2 = line_end_p_x;
    int y2 = k * line_end_p_x + b;

    line(outRGB, cv::Point(x1,y1), cv::Point(x2, y2), cv::Scalar(0, 255, 0), 1);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值