OpenCV学习笔记-直线拟合

Hough 变换可以提取图像中的直线。但是提取的直线的精度不高。而很多场合下,我们需要精确的估计直线的参数,这时就需要进行直线拟合。

直线拟合的方法很多,比如一元线性回归就是一种最简单的直线拟合方法。但是这种方法不适合用于提取图像中的直线。因为这种算法假设每个数据点的X 坐标是准确的,Y 坐标是带有高斯噪声的。可实际上,图像中的每个数据点的XY 坐标都是带有噪声的。

 

 

下面就来讲讲适用于提取图像中直线的直线拟合算法

直线拟合算法在链接的博客里讲的很清楚了,所以我只研究一下代码。

 

 

OpenCV提供的直线拟合函数如下:

fitLine(points, distType, param, reps, aeps, line=None)

distType 指定拟合函数的类型,可以取 CV_DIST_L2、CV_DIST_L1、CV_DIST_L12、CV_DIST_FAIR、CV_DIST_WELSCH、CV_DIST_HUBER。

param 就是 CV_DIST_FAIR、CV_DIST_WELSCH、CV_DIST_HUBER 公式中的C。如果取 0,则程序自动选取合适的值。

reps 表示直线到原点距离的精度,建议取 0.01。
aeps 表示直线角度的精度,建议取 0.01。

ρ

 

 

返回值有四个 vx, vy, x, y 前两个是直线的方向向量,后两个是直线上一个点的坐标。

 

ρ(r)=2(1+r22






 

 

#直线拟合
rows, cols = img.shape[:2]
[vx, vy, x, y] = cv.fitLine(contour, cv.DIST_L2, 0, 0.01, 0.01)
'''
fitLine(points, distType, param, reps, aeps, line=None)
'''
left_y = int((-x*vy/vx) + y)
right_y = int(((cols-x)*vy/vx) + y)
cv.line(img, (cols-1, right_y), (0, left_y), (0, 255, 0), 2)









 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值