Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67246
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2020-05-25 15:21
文章分类

全部博文(14)

文章存档

2020年(14)

我的朋友

分类: 其他平台

2020-06-06 11:12:34

目前机器人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()


用rect作为结构元
OK, 看图示的效果应该是可以达到我的要求, 后面有时间找个地图实测一下。
阅读(1891) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~