Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何在最短路径中找到特定点/坐标?_Python 2.7_Numpy_Matplotlib_Networkx - Fatal编程技术网

Python 2.7 如何在最短路径中找到特定点/坐标?

Python 2.7 如何在最短路径中找到特定点/坐标?,python-2.7,numpy,matplotlib,networkx,Python 2.7,Numpy,Matplotlib,Networkx,我正在使用NetworkX、numpy和查找迷宫的最短路径。最短路径算法得到我想要的结果,我可以用节点绘制路径。然而,我想在这条路径上找到另外一些点,但它们不是最短路径中的节点。以下是使用刚找到的节点指定的最短路径: 以下是我需要的: 以下是原始图像: 如何找到这些点并将其绘制为图像中的红色节点?以下是代码(已编辑): 编辑:这是分别提供转折点和节点的输出 要查找的“角度”点未定义为用于构建图形的“交点”。因此,无法使用相同的方法找到它们 根据这些点的实际定义,方法可以是使用简化路径,在浏

我正在使用NetworkX、numpy和查找迷宫的
最短路径。最短路径算法得到我想要的结果,我可以用节点绘制路径。然而,我想在这条路径上找到另外一些点,但它们不是最短路径中的节点。以下是使用刚找到的节点指定的最短路径:

以下是我需要的:

以下是原始图像:

如何找到这些点并将其绘制为图像中的红色节点?以下是代码(已编辑):

编辑:这是分别提供转折点和节点的输出

要查找的“角度”点未定义为用于构建图形的“交点”。因此,无法使用相同的方法找到它们

根据这些点的实际定义,方法可以是使用简化路径,在
浏览中使用(请参阅)。为此,必须选择公差参数

根据
sknw
自述文件中给出的内容,我尝试重新创建您的:

import numpy as np
import matplotlib.pylab as plt

from skimage.morphology import skeletonize
from skimage import data
import sknw
import networkx as nx
from skimage.measure import approximate_polygon

# open and skeletonize
img = data.horse()
ske = skeletonize(~img).astype(np.uint16)

# build graph from skeleton
graph = sknw.build_sknw(ske)

# draw image
plt.imshow(img, cmap='gray')

# draw edges by pts
for (s,e) in graph.edges():
    polyline = graph[s][e]['pts']
    plt.plot(polyline[:,1], polyline[:,0], 'green', alpha=.6)

    # Find the "corner points" and plot:
    tolerance = 5
    simple_polyline = approximate_polygon(polyline, tolerance)
    plt.plot(simple_polyline[1:-1, 1], simple_polyline[1:-1, 0], '.m')


# draw node by o
node, nodes = graph.node, graph.nodes()
ps = np.array([node[i]['o'] for i in nodes])
plt.plot(ps[:,1], ps[:,0], 'r.')

# title and show
plt.title('Build Graph')
plt.show()
其中给出:(洋红色点为“角度”点)

我认为在迷宫图像上效果会更好

编辑,用于在路径上迭代的示例代码:

one_path = nx.shortest_path(graph, source=0, target=8)

full_line = []
for source, target in zip(one_path, one_path[1:]):
    polyline = graph[source][target]['pts']

    # Find the "corner point":
    tolerance = 5
    simple_polyline = approximate_polygon(polyline, tolerance)
    full_line.extend(simple_polyline[:-1])

full_line.append(simple_polyline[-1]) # add the last point
full_line = np.array(full_line)  # convert to an array

你能发一些代码吗?我想您可能想在路径上寻找方向上的突然变化,但如果我有一些代码可以修改,这会有所帮助。@N.Wouda当然,我添加了整个代码太棒了!你也可以上传被裁剪的图片.jpg
?您可以将其附加到帖子,就像您对其他两个图像所做的那样。这就是我们需要的一切。@N.Wouda对不起,你说得对。我现在附上了它。如果这个问题到那时还没有答案,我今天晚些时候会看一看。哇,它起作用了!非常感谢。虽然它并不比马好,但它确实提供了我想要的点数。然而,为什么它会给出运行时警告?请查看此处的输出和警告:。此外,我如何将这些点排序为链接中的第二个图像:(从第一个节点开始,直到最后一个节点,包括角点)。@EnderAyhan我添加了一些代码,以构建从入口点到出口点的唯一路径。我没有收到这些警告。。。你试着增加容忍度了吗?我再也没有收到警告了。我还在研究你的解决方案。我把你的新代码放进我的(用你的解决方案进行后期编辑)。它仍然没有给出我需要的列表。因为我需要用转折点压缩节点。因此,通过在列表中包含转折点,路径可以从源节点开始直到目标节点。也许我不能正确应用你的代码。你能用我在帖子中提供的原始迷宫图片将你的新代码插入到我的代码中,运行并了解我的意思吗?如果你这样做,我将不胜感激。我还附上了澄清@xdze2的输出截图
one_path = nx.shortest_path(graph, source=0, target=8)

full_line = []
for source, target in zip(one_path, one_path[1:]):
    polyline = graph[source][target]['pts']

    # Find the "corner point":
    tolerance = 5
    simple_polyline = approximate_polygon(polyline, tolerance)
    full_line.extend(simple_polyline[:-1])

full_line.append(simple_polyline[-1]) # add the last point
full_line = np.array(full_line)  # convert to an array