程序提示ValueError: operands could not be broadcast together with shapes (177,326) (177,),def reconstruct_3d_skeleton(filename): # 读取二维骨架图像 skeleton_img = cv2.imread('skeleton_gaussian.bmp', cv2.IMREAD_GRAYSCALE) # 读取含有高度信息的图像 height_img = cv2.imread('median_high.bmp', cv2.IMREAD_GRAYSCALE) # 将二维骨架图和高度信息图像沿着Z轴堆叠,得到一个三维数组 skeleton_3d = np.zeros((skeleton_img.shape[0], skeleton_img.shape[1], height_img.shape[1]), dtype=np.uint8) for i in range(height_img.shape[1]): skeleton_3d[:, :, i] = skeleton_img skeleton_3d[:, :, i] = skeleton_3d[:, :, i] * height_img[:, i] # 获取骨架线路径上的所有点,以及它们在三维数组中的坐标和宽度 skeleton_points = [] contours, hierarchy = cv2.findContours(skeleton_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cnt = contours[0] for i in range(len(cnt) - 1): p1 = cnt[i][0] p2 = cnt[i + 1][0] rr, cc, zz = line_nd(p1 + (0,), p2 + (height_img.shape[1] - 1,)) for j in range(len(rr)): skeleton_points.append([rr[j], cc[j], zz[j], 1]) # 将每个点的坐标和宽度映射到三维数组中,得到一个三维点云 point_cloud = [] for point in skeleton_points: x, y, z, width = point point_cloud.append([x, y, z, width]) point_cloud = np.array(point_cloud) # 使用Marching Cubes算法进行三维重建 verts, faces, _, _ = measure.marching_cubes(skeleton_3d, 0.1) # 返回三维点云 return point_cloud
时间: 2024-01-17 10:04:24 浏览: 72
ValueError: Could not find a format to read the specified file in mode ‘i’
这次修改后的代码看起来没有问题,但是我注意到你仅仅对点云的width属性进行了修改,还有可能出现这个错误的原因是在高度信息图像(height_img)和二维骨架图像(skeleton_img)的形状不一致,但这个错误不会在这段代码中引发异常。因此,建议你检查一下这两个图像的形状是否一致。
同时,你也可以将点云的width属性的值修改成其他值,例如:
```python
point_cloud.append([x, y, z, width * 0.5])
```
然后再次运行程序,看看是否还会出现这个错误。如果还有问题,可以提供更多的信息,或者将完整的代码和错误信息一起提供给我。
阅读全文