一、设置感兴趣区域
第一步设置区域四个顶点,通过数组
vertices = np.array([[[x1, y1], [x1, y2], [x2, y1], [x2, y2]]], dtype=np.int32)
第二步创建基于原图灰度图的mask图
mask = np.zeros_like(gray_img)
第三步使用 fillpoly 来绘制 mask
cv2.fillPoly(mask, vertices, fill_color)
# fill_color通道数要与原图一样
python+opencv填充图像不规则区域:fillPoly和fillConvexPoly区别、半透明填充方法
第四步使用ROI异或运算合并图片
cv2.bitwise_and(img, mask)
二、颜色阈值提取感兴趣区域
第一步设置提取图像的范围
ysize,xsize = img.shape[:2]
color_select = np.copy(img)
第二部设置RGB阈值
red_threshold = 200
green_threshold = 200
blue_threshold = 200
rgb_threshold = [red_threshold, green_threshold, blue_threshold]
第三步设置布尔型数组,低于阈值为True
thresholds = (img[:,:,0] < rgb_threshold[0]) |\
(img[:,:,1] < rgb_threshold[1]) |\
(img[:,:,2] < rgb_threshold[2])
第四步将小于阈值的区域RGB值设置为白
color_select[thresholds] = [0,0,0]
三、最小二乘法拟合曲线
按偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。
概念
最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x)
原理
给定数据点pi(xi,yi),其中i=1,2,…,m。求近似曲线y= φ(x)。并且使得近似曲线与y=f(x)的偏差最小。近似曲线在点pi处的偏差δi= φ(xi)-y,i=1,2,...,m。
两种方法实现最小二乘法拟合
第一种:python中scipy.optimize.leastsq(最小二乘拟合)用法
第二种:使用polyfit通过点坐标拟合出曲线函数,再使用polyval计算坐标numpy-poly1d、polyfit、polyval
霍夫线段检测
HoughLine是标准的霍夫变换,它可以检测出直线的位置和方向,但不能检测出直线的长度。
HoughLinesP函数是改进的霍夫变换,它可以检测出直线的位置、方向和长度。它返回的是直线的起点和终点坐标,可以直接用于绘制直线。