车的换道检测( 二 )


定义-“轮廓表示图像中曲线的点的列表 。 ”
轮廓由序列表示 , 每个序列都对下一个点的位置信息进行编码 。 我们在roi中多次运行cv2.findConteurs()来获取实体 , 然后使用cv2.drawContours()绘制轮廓区域 。 轮廓可以是点、边、多边形等 , 所以在绘制等高线时 , 我们做多边形近似 , 求出边的长度和区域的面积 。
函数cv2.drawContours()的工作原理是从根节点开始绘制一棵树(数据结构) , 然后连接后续点、边界框和Freeman链码 。
thresh = maskcontours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)# 定义轮廓的最小面积(忽略min以下的所有值)min_area = 1000cont_filtered = []# 过滤掉最小面积以下的所有轮廓线for cont in contours:if cv2.contourArea(cont) > min_area:cont_filtered.append(cont)cnt = cont_filtered[0]# 围绕轮廓画出矩形rect = cv2.minAreaRect(cnt)box = cv2.boxPoints(rect)box = np.int0(box)cv2.drawContours(frame,[box],0,(0,0,255),2)rows,cols = thresh.shape[:2][vx,vy,x,y] = cv2.fitLine(cnt, cv2.DIST_L2,0,0.01,0.01)lefty = int((-x*vy/vx) + y)righty = int(((cols-x)*vy/vx)+y)cv2.line(frame,(cols-1,righty),(0,lefty),(0,255,0),2)找到轮廓后的另一个重要任务是匹配它们 。 匹配轮廓意味着我们有两个独立的计算轮廓来相互比较 , 或者有一个轮廓与一个抽象模板进行比较 。
5.特征矩我们可以通过计算轮廓矩来比较两个轮廓 。 “特征矩是轮廓的总特征 , 通过将轮廓的所有像素相加来计算 。 ”
车的换道检测文章插图
力矩类型
空间特征矩:m00, m10, m01, m20, m11, m02, m30, m21, m12, m03.
中心特征矩:mu20, mu11, mu02, mu30, mu21, mu12, mu03.
Hu特征矩:有七个Hu特征矩(h0-h6)或(h1-h7) , 这两个符号都使用 。
我们使用cv2.fitEllipse()计算特征矩并在点上拟合椭圆 。 从轮廓线和特征矩中找到角度 , 因为改变车道需要45度旋转 , 这被视为汽车转弯角度的阈值 。
车的换道检测文章插图
M = cv2.moments(cnt)cx = int(M['m10']/M['m00'])cy = int(M['m01']/M['m00'])(x,y),(MA,ma),angle = cv2.fitEllipse(cnt)print('x= ', cx, 'y= ', cy, ' angle = ', round(rect[2],2))if(round(rect[2],2))<-45:# print('Lane change detected')popupmsg('Lane change detected')现在 , 我们可以使用Tkinter来创建一个简单的弹出窗口来警告变化 , 而不仅仅是打印变化的检测结果 。
if(round(rect[2],2))<-45:popupmsg('Lane change detected')def popupmsg(msg):popup = tk.Tk()popup.wm_title("Message")label = ttk.Label(popup, text=msg, font=NORM_FONT)label.pack(side="top", fill="x", pady=10)B1 = ttk.Button(popup, text="Okay", command = popup.destroy)B1.pack()popup.mainloop()
车的换道检测文章插图
在车架上画矩形 , 用绿线测量角度
车的换道检测文章插图
车的换道检测文章插图
6.总结和未来在本教程中 , 将使用车道变化检测方法探索智能汽车导航的一个小演示 。
计算机视觉正在迅速发展 , 它的应用不仅在汽车的局部导航 , 而且在火星上的导航和产品检测领域也在进步 , 甚至在医学应用中也在开发和用于早期在X射线图像中检测癌症和肿瘤 。
单击此处获取GitHub帐户的源代码:
参考文献

  • Bradski, Gary and Kaehler, Adrian, Learning OpenCV: Computer Vision in C++ with the OpenCV Library, O’Reilly Media, Inc., 2nd edition, 2013, @10.5555/2523356, ISBN — 1449314651.
  • Laganiere, Robert, OpenCV Computer Vision Application Programming Cookbook, Packt Publishing, 2nd edition, 2014, @10.5555/2692691, ISBN — 1782161481.