使用viz模块在OpenCV Python中加载网格



我正在创建一个AR应用程序,在那里你可以虚拟地试穿鞋子。现在,我已经使用SolvePnp计算了脚部的位置。现在,我想使用OpenCv-Viz模块在图像的顶部渲染3D对象(.obj(文件。(手动编译工作(

我想使用cv::viz::Mesh::load函数将对象加载为cv::viz::Mesh对象,但我找不到相应的Python函数调用。

我试过

mesh = cv2.viz_Mesh()
mesh.load('shoe.obj', cv2.viz_Mesh_LOAD_OBJ)

以及

mesh = cv2.viz_Mesh_load('shoe.obj', cv2.viz_Mesh_LOAD_OBJ)

我总是得到错误:AttributeError: 'cv2.viz_Mesh' object has no attribute 'load'

使用python中的dir()函数,我找到了除load方法之外的所有其他方法,load方法是一个静态方法(这可能就是它不在这里的原因(。

>>> dir(cv2) #contains the Viz Classes
['', ... , 'viz',... ,'viz_Mesh] 
>>> dir(cv2.viz) #Stuff like Enums , Colors etc
['',...'Color_amethyst', ..., 'MOUSE_EVENT_MOUSE_DBL_CLICK'...]
>>> dir(cv2.viz_Mesh) #pyhton functions and other non static methods
['__class__', ... , 'colors','polygons']

有人知道什么是正确的python调用吗?

附录:cv2.viz_Mesh_LOAD_OBJ和cv2.viz _Mesh_LOAD_OBJ仅表示整数2(=enums(,因此

>>>print(cv2.viz_MESH_LOAD_OBJ)
>>>print(cv2.viz_Mesh_LOAD_OBJ)
2
2

我找到了解决方案。我忽略了dir(cv2.viz)中的一些方法。正确的python调用应该是

mesh = cv2.viz.readMesh('./shoe.ply')

它只接受.ply文件的路径,而不接受.obj文件的路径(4.5.5版(。也许在新版本的中会添加其他格式

最新更新