如何将源和目标参数定义为shortest_path的数组?

时间:2018-09-04 21:46:05

标签: python numpy opencv networkx shortest-path

我正在使用NetworkX,opencv,numpy和python在图中找到shortest_path。它并不总是提供我需要的东西。 shortest_path函数查找从图像顶部到底部的路径。我的路总是在变化。对于每个图像,始终知道起点和目标点。因此,我想找到这些点(起点和目标)之间的最短路径。但是,当源点和目标点不是节点且不在G中时,它并不能满足我的需求。

shortest_path(G, source=None, target=None, weight=None)

如何找到图像中两个特定坐标点之间的shortest_path?此外,如何分配像素坐标作为源和目标?例如,来源是[45 66],目标是[250 350]

1 个答案:

答案 0 :(得分:0)

对于第二个问题,节点可以具有所需的尺寸。
例如,考虑以下网格。

import networkx as nx

g = nx.grid_2d_graph(2,2)

print(g.nodes()) #[(0, 0), (0, 1), (1, 0), (1, 1)]
print(g.edges()) #[((0, 0), (1, 0)), ((0, 0), (0, 1)), ((0, 1), (1, 1)), ((1, 0), (1, 1))]
print(nx.shortest_path(g, source=(0, 0), target=(1,0))) #[(0, 0), (1, 0)]

或具有更大尺寸:

g = nx.grid_graph(dim=[2,2,2,2])
g.nodes()
#[(0, 0, 0, 0), (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1), (1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1), (1, 0, 1, 0), (0, 1, 1, 0), (1, 0, 1, 1), (0, 1, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)]

对于其他问题:

  • 我的路径总是变化的:这取决于边缘的权重,如果最短的路径不是唯一的,则通常会发生变化

  • 当源点和目标点不是节点且不在G中时:networkx查找G的两个节点之间的最短路径,如果节点不在G中,则它将不起作用