繁体   English   中英

networkx.exception.NodeNotFound 即使节点存在

[英]networkx.exception.NodeNotFound even if the node exists

我正在使用sknw从骨架图像构建图形(图像是用scikit-image生成的)。 问题是当我尝试使用 skimage networkx.exception.NodeNotFound中给出的任何算法绘制最短路径时。 但是 function graph.has_node()表示该节点存在。

困了好多天不知道怎么办。 任何帮助表示赞赏。

代码

 from skimage.morphology import skeletonize from skimage import data, io from skimage.graph import shortest_path import matplotlib.pyplot as plt import sknw import.networkx as nx import numpy as np import numba img = io.imread('m5_skeleton.png') 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(): ps = graph[s][e]['pts'] plt.plot(ps[:, 1], ps[:, 0], 'green') # draw node by o nodes = graph.nodes() ps = np.array([nodes[i]['o'] for i in nodes]) plt.plot(ps[:, 1], ps[:, 0], 'r.') print('------------------------------------------------------------------------------') print('nodes') print('------------------------------------------------------------------------------') print(nodes) print('------------------------------------------------------------------------------') # title and show plt.title('Build Graph') plt.savefig('m5_graph.svg', dpi=1200) pos = nx.spring_layout(graph) print('------------------------------------------------------------------------------') print('pos') print('------------------------------------------------------------------------------') print(pos) print('------------------------------------------------------------------------------') # nx.draw(graph, pos, node_color='k') # draw path in red print('graph.has_node(0): ' + str(graph.has_node(0))) print('graph.has_node(10): ' + str(graph.has_node(10))) # source = graph.nodes[0] # target = graph.nodes[2] path = nx.astar_path(graph, graph.nodes.get(0), graph.nodes.get(10)) h = graph.subgraph(path) path_edges = zip(path, path[1:]) path_edges = set(path_edges) nx.draw.networkx_nodes(h, pos, nodelist=path, node_color='b', cmap='gray') nx.draw.networkx_edges(h, pos, edge_cmap='gray') plt.axis('equal') plt.show()

在此处输入图像描述 上面是我用过的m5_skeleton.png图片。

您需要更换:

path = nx.astar_path(graph, graph.nodes.get(0), graph.nodes.get(10))

path = nx.astar_path(graph, 0, 10)

也就是说,function 将节点的ID而不是节点的内容作为输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM