当前位置与黑线opencv之间的距离

时间:2017-11-05 09:31:16

标签: python opencv robotics

enter image description here

考虑上面的图像,它用作环境地图。 每条黑线表示"墙"。

问题是使用一系列ForwardTurnRightTurnLeft动作使模拟机器人(直径10像素)到达右下方的黄色框。向前移动机器人5 px;每个转弯动作将机器人方向改变30度。

  • 墙壁的位置不固定。但地图的大小是固定的(200 px X 200 px)
  • 我从地图上的任意位置(x, y)和方向(theta = pi/2.0)开始。
  • 我在机器人移动时跟踪(x, y)坐标和方向(theta)。

鉴于机器人(x, y)的当前位置,我需要找到所有4个方向上距离最近的墙壁的距离。

如何使用OpenCV函数确定距离?

(我现在才开始使用OpenCV / vision。)

编辑1:

以下是我的尝试:

(1)获取"墙壁"单独:

for i in range(img.shape[0]):
    for j in range(img.shape[1]):
        if any(img[i,j] == 255):
            gs_black[i,j] = [255,255,255]
        else:
            gs_black[i,j] = [0,0,0]

这给了我:

enter image description here

(2)获取墙壁的像素位置

walls = []
for i in range(img.shape[0]):
    for j in range(img.shape[1]):
        if all(img[i,j] == 0):
            walls.append([i, j])

编辑2:

基于@Miki的建议,试图获得距离变换

thresh = cv2.threshold(gs_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]

from skimage.feature import peak_local_max
from skimage.morphology import watershed
from scipy import ndimage
D = ndimage.distance_transform_edt(thresh)

可视化变换给出:

enter image description here

现在,我不知道如何改变这个变换值。

0 个答案:

没有答案