目前机器人RO用的路劲规划是DWA, 类似于D*, 最短路径法。 但最好的方式是有效通道的中间位置找出来, 然后进行行进, 这样更安全。 

所以, 咨询了算法的同学, 使用图像学中的骨架化,可以解决这个问题。
代码

点击(此处)折叠或打开

  1. import numpy as np
  2.  
  3. im=cv2.imread('1.png',cv2.IMREAD_GRAYSCALE)
  4. thresh,im=cv2.threshold(im,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
  5. cv2.imshow('binary.png',im)#控制背景为黑色
  6. dst = im.copy()
  7.  
  8. num_erode = 0
  9.  
  10. while(True):
  11.     if np.sum(dst)==0:
  12.         break
  13.     kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
  14.     dst = cv2.erode(dst,kernel)
  15.     num_erode = num_erode + 1
  16.  
  17. skeleton = np.zeros(dst.shape,np.uint8)
  18.  
  19. for x in range(num_erode):
  20.     kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
  21.     dst = cv2.erode(im,kernel,None,None,x)
  22.     open_dst = cv2.morphologyEx(dst,cv2.MORPH_OPEN,kernel)
  23.     result = dst - open_dst
  24.     skeleton = skeleton + result
  25.     cv2.waitKey(1000)
  26.  
  27.  
  28. cv2.imshow('result',skeleton)
  29.  
  30. cv2.waitKey(0)
  31. cv2.destroyAllWindows()
OpenCV 骨架化处理 - 用于机器人路径规划-LMLPHP

用rect作为结构元OpenCV 骨架化处理 - 用于机器人路径规划-LMLPHP
OK, 看图示的效果应该是可以达到我的要求, 后面有时间找个地图实测一下。
09-07 03:13