verts,_,_,_=measure.marching_cubes_lewiner(root_stack,0) lengths=measure.mesh_edges(verts)如何修改
时间: 2024-02-27 13:51:39 浏览: 85
`measure.marching_cubes_lewiner`函数同样返回一个包含顶点、三角形索引等信息的元组,因此你可以直接使用元组中的顶点信息计算网格的边数。以下是修改后的代码示例:
```
import skimage.measure as measure
verts, faces, _, _ = measure.marching_cubes_lewiner(root_stack, 0)
num_edges = len(faces) # faces存储了三角形索引信息,因此它的长度即为网格的边数
print(num_edges)
```
同样需要注意,此处计算的是三角形网格的边数。如果你需要计算其他类型的网格边数,可以使用相应的计算方式。
相关问题
verts,_,_,_=measure.marching_cubes(root_stack,0) lengths=measure.mesh_edges(verts)如何修改
`measure.marching_cubes`函数返回的是一个包含顶点、三角形索引等信息的元组,因此你可以直接使用元组中的顶点信息计算网格的边数。以下是修改后的代码示例:
```
import skimage.measure as measure
verts, faces, _, _ = measure.marching_cubes(root_stack, 0)
num_edges = len(faces) # faces存储了三角形索引信息,因此它的长度即为网格的边数
print(num_edges)
```
注意,此处计算的是三角形网格的边数。如果你需要计算其他类型的网格边数,可以使用相应的计算方式。例如,对于四边形网格,可以将`faces`视为四边形索引,计算其长度并乘以4得到网格边数。
程序执报错ValueError: not enough values to unpack (expected 3, got 2),img = cv2.imread('gaussian.bmp', cv2.IMREAD_GRAYSCALE) # 提取骨架线 skeleton = cv2.ximgproc.thinning(img) # 获取骨架线路径 _, contours, hierarchy = cv2.findContours(skeleton, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cnt = contours[0] # 确定骨架线的宽度 width = 2 # 将二维骨架图沿着Z轴堆叠,得到一个三维数组 skeleton_3d = np.zeros((skeleton.shape[0], skeleton.shape[1], 10), dtype=np.uint8) for i in range(10): skeleton_3d[:, :, i] = skeleton # 获取骨架线路径 skeleton_points = [] for i in range(len(cnt) - 1): p1 = cnt[i][0] p2 = cnt[i + 1][0] rr, cc, zz = line_nd(p1 + (0,), p2 + (9,)) for j in range(len(rr)): skeleton_points.append([rr[j], cc[j], zz[j], width]) skeleton_points = np.array(skeleton_points) # 使用Marching Cubes算法进行三维重建 verts, faces, _, _ = measure.marching_cubes(skeleton_3d, 0.1) # 绘制三维模型 fig = plt.figure(figsize=(10, 10)) ax = fig.add_subplot(111, projection='3d') ax.plot_trisurf(verts[:, 0], verts[:, 1], faces, verts[:, 2], cmap='jet')
这个错误通常是由于使用了不同版本的 OpenCV 库或者不同的函数参数导致的。你可以尝试修改解包语句 `_, contours, hierarchy = cv2.findContours(skeleton, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)`,将其改为 `contours, hierarchy = cv2.findContours(skeleton, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[-2:]`,这样就可以忽略第一个返回值,直接解包后面的两个返回值了。
阅读全文