使用python从二进制png图像中提取STL



我一直在为一个正在进行的项目编写此代码,该项目将(希望)从扫描电子显微镜中获取图像,并生成成像结构的3D STL文件。我正处于代码的阶段,我正试图从我用一些边缘检测代码制作的"彩色"二进制图像中生成3D结构。我看到了这篇文章,我如何用python挤出一个stl,它基本上完全符合我的需要(从二进制图像生成一个网格化的3D结构)。我曾尝试使用/调整该帖子答案中的代码(见下文),但我一直遇到以下错误:polyline2 = mr.distanceMapTo2DIsoPolyline(dm.value(), isoValue=127) RuntimeError: Bad expected access。我在网上找不到任何关于为什么会发生这种情况的信息,而且我不是Python专家,所以我自己也不知道。如果有人有想法,我真的很感激!

从答案到以上帖子的代码:

import meshlib.mrmeshpy as mr
# load image as Distance Map object:
dm = mr.loadDistanceMapFromImage(mr.Path("your-image.png"), 0)
# find boundary contour of the letter:
polyline2 = mr.distanceMapTo2DIsoPolyline(dm.value(), isoValue=127)
# triangulate the contour
mesh = mr.triangulateContours(polyline2.contours2())
# extrude itself:
mr.addBaseToPlanarMesh(mesh, zOffset=30)
# export the result:
mr.saveMesh(mesh, mr.Path("output-mesh.stl"))

我尝试过以下几种:

  • 重新配置了此命令使用的MeshLib包。此处的包文档:https://meshinspector.github.io/MeshLib/html/index.html#PythonIntegration
  • 更新VS studio/python/MeshLib

在旧版本的meshlibpython模块RuntimeError: Bad expected access指示mr.loadDistanceMapFromImage失败,您应该这样检查:

import meshlib.mrmeshpy as mr
# load image as Distance Map object:
dm = mr.loadDistanceMapFromImage(mr.Path("your-image.png"), 0)
# check dm
if ( not dm.has_value() ):
raise Exception(dm.error())
# find boundary contour of the letter:
polyline2 = mr.distanceMapTo2DIsoPolyline(dm.value(), isoValue=127)
# triangulate the contour
mesh = mr.triangulateContours(polyline2.contours2())
# extrude itself:
mr.addBaseToPlanarMesh(mesh, zOffset=30)
# export the result:
mr.saveMesh(mesh, mr.Path("output-mesh.stl"))

但在实际发布中,您的代码会出现异常并出现真正的错误

请确保路径是正确的,如果没有帮助,请提供更多信息,如png文件、python版本、MeshLib版本以及其他任何相关信息。

附言:如果MeshLib真的有问题,最好在github中打开问题。

最新更新