如何编写Metashape(Photoscan) python脚本

Metashape,之前也叫做Photoscan,提供了python接口,可以使用python脚本来进行自动化处理。但是目前这方面的资料实在是比较少,可能是因为大部分人都习惯使用界面来进行操作吧,但其实在很多场合下,使用python脚本进行自动化处理能极大地提高工作效率(针对某些流程比较固定的任务)。所以,我通过读官方的文档自己摸索了一些非常基本的脚本操作。

首先先说明一下,Metashape调用python脚本有三种方式:

  1. 在软件内部调用(这个最简单)
  2. 在软件外部使用metashape.exe调用(详见Metashape在软件外面调用python脚本
  3. 使用stand-alone module进行编写并调用(这个需要license)

但无论你用哪种调用方式,其基本的代码流程是差不多的。

import Metashape

#实例化一个chunk对象
doc=Metashape.app.document
chunk=doc.addChunk()    #在软件外部调用,软件没打开,那么就不存在chunk,必须添加一个。
#chunk=doc.chunk        #在软件内部调用,因为打开软件后其实一个chunk就已经被激活了。

#添加照片
chunk.addPhotos(list[string]) #伪代码,参数为一个存放照片路径字符串的list对象

#判断版本,1.5和1.6某些函数的参数不同,如果想改变重建的质量,1.6版本需要改变downscal参数的值,1为最高质量。
major_version = ".".join(Metashape.app.version.split('.')[:2])

if version=='1.5':
    #匹配
    chunk.matchPhotos(accuracy=Metashape.MediumAccuracy, generic_preselection=True,reference_preselection=False)
    #建立深度图
    chunk.buildDepthMaps(quality=Metashape.HighQuality, filter=Metashape.AggressiveFiltering)
if version=='1.6':
    #匹配
    chunk.matchPhotos(downscale=1,generic_preselection=True,reference_preselection=False)
    #建立深度图
    chunk.buildDepthMaps(downscale=1, filter_mode=Metashape.AggressiveFiltering)

#点云重建
chunk.buildDenseCloud()

#构建模型
chunk.buildModel(surface_type=Metashape.Arbitrary, interpolation=Metashape.EnabledInterpolation)

#UV分解
chunk.buildUV(mapping_mode=Metashape.GenericMapping)

#纹理贴图
chunk.buildTexture(blending_mode=Metashape.MosaicBlending, texture_size=4096)

#保存项目
doc.save(path = "project.psz", chunks = [doc.chunk])

 这段代码就是大概的整个流程,但是注意,上面的代码现在还跑不起来,因为没有相关的照片,所以里面没有照片路径。大家可以参照这个并结合官方的文档编写自己的脚本。

对于已有的项目,官方文档给出的代码是这样的:

如果你有自己的项目,可以试试这段代码(不过要注意版本区别,在我的代码里面给了说明)

另外,刚开始可以在软件内部试着调用一下脚本看看效果,调用方法如下:

大概的流程就是这样,如果你的脚本里导入了其它的python包,那么你需要将这些包也安装到Metashape自带的python环境中。具体方法参考:https://blog.csdn.net/qq_41475842/article/details/107243856

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值