opencv-python 中直线拟合函数cv.fitLine()的2D直线拟合(适合小白观看)

﹥>﹥吖頭↗ 提交于 2019-12-19 05:37:46

在提取指静脉的过程中,我们需要提取有用的ROI区域。而这时候,我们会采取将手指两边中点拟合成一条直线,求得这个直线的直线方程,然后得到旋转的角度,以便对原来的图像进行旋转操作。当我们知道如何取得手指的边缘中点后,直接用fitLine函数可以方便的按我们想要的方式得到期望 的直线。

首先是官方文档上的函数原型:

 然后我会通过实例来解释每一个参数的意义,代码十分简单:

import cv2 as cv
import numpy as np

test =[(1,2),(2,4),(3,6)]
nptest=np.array(test)
line =cv.fitLine(nptest,cv.DIST_L2,0,0.01,0.01)

 这里的line就是我们的结果了

line的形式是[[cos  a],[sin a],[point_x],[point_y]],前面两项是有关直线与X正半轴(这里指的是屏幕坐标系)夹角a的三角函数,后面两项就是所得拟合直线上的一点的横纵坐标。我们知道一个直线的倾斜角度和它经过的一个点后就可以唯一确定一条直线。

参数列表解释:

 

points :必须是nparray类型的点集(一般的数列直接报错噢),里面是你想拟合点的坐标 

distType:有很多种,就是有关距离的定义,我们直接用的是最快最简单的L2距离,就是我们常用的最小二乘法。

param:这是一些距离计算类型(distType)中用到的参数,我们这里用的是L2距离,直接写0.实际上,写0的话,系统会自动给你用最优的参数。

reps和aeps:用于表示拟合直线所需要的径向和角度精度,通常情况下两个值均被设定为0.01。

 

初期对这个函数了解到这么多就足够我们使用啦

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!