一、利用VTK渲染模型

1.1 VTK渲染模型流程:

① 模型数据导入

    # 获取一个Cone(圆锥)模型  cone = vtkConeSource()

② 数据通过Mapper转换为几何图元

    # 创建一个MapperconeMapper = vtkPolyDataMapper()# 将vtkConeSource实例放入这个MapperconeMapper.SetInputConnection(cone.GetOutputPort())

③ 几何图元通过vtkActor转换为实体

    # 创建一个vtkActorconeActor = vtkActor()# 将之前创建的Mapper放入这个Actor中coneActor.SetMapper(coneMapper)

④ 通过vtkRenderer渲染这个实体

 # 创建一个渲染器Renderer,用来显示我们创建的Actorren1 = vtkRenderer()# 将Actor放进这个渲染器Renderer中ren1.AddActor(coneActor)

⑤ 渲染好的实体在vtkRenderWindow上显示

 # 通过vtkRenderWindow()创建一个窗口,用来接收Renderer渲染器。renWin = vtkRenderWindow()# 将创建的Renderer渲染器放进这个窗口里renWin.AddRenderer(ren1)

给出官网教程的地址:https://kitware.github.io/vtk-examples/site/Python/Tutorial/Tutorial_Step1/https://kitware.github.io/vtk-examples/site/Python/Tutorial/Tutorial_Step1/

1.2 VTK渲染模型代码:

import sys
import vtk
from vtkmodules_vtkCommonColor import vtkNamedColors
from vtkmodules_vtkFiltersSources import vtkConeSource
from vtkmodules_vtkRenderingCore import vtkPolyDataMapper, vtkActor, vtkRenderer, vtkRenderWindowdef main(argv):# 第一步,创建vtkNamedColors,为对象和背景选择颜色colors = vtkNamedColors()# 创建vtkConeSource实例cone = vtkConeSource()cone.SetHeight(5.0)cone.SetRadius(1.0)cone.SetResolution(10)# 创建一个MapperconeMapper = vtkPolyDataMapper()# 将vtkConeSource实例放入这个MapperconeMapper.SetInputConnection(cone.GetOutputPort())# 创建一个vtkActorconeActor = vtkActor()# 将之前创建的Mapper放入这个Actor中coneActor.SetMapper(coneMapper)# 为这个Actor设置颜色coneActor.GetProperty().SetColor(colors.GetColor3d("red"))# 创建一个渲染器Renderer,用来显示我们创建的Actorren1 = vtkRenderer()# 将Actor放进这个渲染器Renderer中ren1.AddActor(coneActor)# 为这个渲染器设置背景颜色ren1.SetBackground(colors.GetColor3d('pink'))# 通过vtkRenderWindow()创建一个窗口,用来接收Renderer渲染器。renWin = vtkRenderWindow()# 将创建的Renderer渲染器放进这个窗口里renWin.AddRenderer(ren1)# 设置窗口大小renWin.SetSize(300, 300)# 设置窗口名称renWin.SetWindowName('Hello_World')for i in range(0, 360):# 渲染图片renWin.Render()# 调用摄像机,一度一度旋转视角ren1.GetActiveCamera().Azimuth(1)if __name__ == '__main__':main(sys.argv)

程序运行结果:渲染一个管道,旋转360度后,程序结束渲染。

二、监听VTK模型

VTK 使用命令/观察者设计模式。也就是说,观察者监视任何vtkObject(或子类)可能对其自身调用的特定事件。例如,vtkRenderer在开始渲染时调用“StartEvent”。这里我们添加一个观察者,当观察到这个事件时调用一个命令。

① 简单的来说,就是通过Renderer自带的AddObserver('StartEvent', mo1)函数,监测,一旦发生事件‘StartEvent’(Renderer开始渲染)就调用mo1。

    # mo1绑定渲染器ren1mo1 = vtkMyCallback(ren1)# vtkRenderer在开始渲染时调用“StartEvent”。# 这里我们添加一个观察者,当观察到这个事件时调用一个命令,打印当前摄影机位置。ren1.AddObserver('StartEvent', mo1)

② 回调函数

# 设置回调函数
class vtkMyCallback(object):# 实例化def __init__(self, renderer):self.renderer = renderer# 调用时打印当前摄影机位置def __call__(self, caller, ev):position = self.renderer.GetActiveCamera().GetPosition()print('({:5.2f}, {:5.2f}, {:5.2f})'.format(*position))

③ 整体代码

import sys
import vtk
from vtkmodules_vtkCommonColor import vtkNamedColors
from vtkmodules_vtkFiltersSources import vtkConeSource
from vtkmodules_vtkRenderingCore import vtkPolyDataMapper, vtkActor, vtkRenderer, vtkRenderWindowdef main(argv):# 第一步,创建vtkNamedColors,为对象和背景选择颜色colors = vtkNamedColors()# 创建vtkConeSource实例cone = vtkConeSource()cone.SetHeight(5.0)cone.SetRadius(1.0)cone.SetResolution(10)# 创建一个MapperconeMapper = vtkPolyDataMapper()# 将vtkConeSource实例放入这个MapperconeMapper.SetInputConnection(cone.GetOutputPort())# 创建一个vtkActorconeActor = vtkActor()# 将之前创建的Mapper放入这个Actor中coneActor.SetMapper(coneMapper)# 为这个Actor设置颜色coneActor.GetProperty().SetColor(colors.GetColor3d("red"))# 创建一个渲染器Renderer,用来显示我们创建的Actorren1 = vtkRenderer()# 将Actor放进这个渲染器Renderer中ren1.AddActor(coneActor)# 为这个渲染器设置背景颜色ren1.SetBackground(colors.GetColor3d('pink'))# 通过vtkRenderWindow()创建一个窗口,用来接收Renderer渲染器。renWin = vtkRenderWindow()# 将创建的Renderer渲染器放进这个窗口里renWin.AddRenderer(ren1)# 设置窗口大小renWin.SetSize(300, 300)# 设置窗口名称renWin.SetWindowName('Hello_World')# mo1绑定渲染器ren1mo1 = vtkMyCallback(ren1)# vtkRenderer在开始渲染时调用“StartEvent”。# 这里我们添加一个观察者,当观察到这个事件时调用一个命令,打印当前摄影机位置。ren1.AddObserver('StartEvent', mo1)for i in range(0, 360):# 渲染图片renWin.Render()# 调用摄像机,一度一度旋转视角ren1.GetActiveCamera().Azimuth(1)
# 设置回调函数
class vtkMyCallback(object):# 实例化def __init__(self, renderer):self.renderer = renderer# 调用时打印当前摄影机位置def __call__(self, caller, ev):position = self.renderer.GetActiveCamera().GetPosition()print('({:5.2f}, {:5.2f}, {:5.2f})'.format(*position))if __name__ == '__main__':main(sys.argv)

三、VTK多个渲染器对模型进行渲染

① VTK创建多个渲染器对模型进行渲染,其实就是通过vtkRenderer()创建多个Renderer再把这些Renderer注册到窗口里即可。

    # 创建一个渲染器Renderer,用来显示我们创建的Actorren1 = vtkRenderer()# 将Actor放进这个渲染器Renderer中ren1.AddActor(coneActor)# 再创建一个渲染器,用来显示我们创建的Actorren2 = vtkRenderer()ren2.AddActor(coneActor)# 将创建的Renderer渲染器放进这个窗口里renWin.AddRenderer(ren1)renWin.AddRenderer(ren2)

② 这里需要注意的是, 需要通过SetViewport()设置Renderer相对于窗口的大小和位置。

【以视窗左下角为原点构建坐标系,用两个点绘制出相应的视窗】

比如:SetViewport(0,0,0.5,1)代表如下图所示,左边的粉色部分。

前两个(0,0)代表着相对于左下角的坐标位置。后两个(0.5,1)代表相对于右上角的坐标位置。

SetViewport(0.2,0.6,0.5,1)

③ 整体代码:

import sys
import vtk
from vtkmodules_vtkCommonColor import vtkNamedColors
from vtkmodules_vtkFiltersSources import vtkConeSource
from vtkmodules_vtkRenderingCore import vtkPolyDataMapper, vtkActor, vtkRenderer, vtkRenderWindowdef main(argv):# 第一步,创建vtkNamedColors,为对象和背景选择颜色colors = vtkNamedColors()# 创建vtkConeSource实例cone = vtkConeSource()cone.SetHeight(5.0)cone.SetRadius(1.0)cone.SetResolution(10)# 创建一个MapperconeMapper = vtkPolyDataMapper()# 将vtkConeSource实例放入这个MapperconeMapper.SetInputConnection(cone.GetOutputPort())# 创建一个vtkActorconeActor = vtkActor()# 将之前创建的Mapper放入这个Actor中coneActor.SetMapper(coneMapper)# 为这个Actor设置颜色coneActor.GetProperty().SetColor(colors.GetColor3d("red"))# 创建一个渲染器Renderer,用来显示我们创建的Actorren1 = vtkRenderer()# 将Actor放进这个渲染器Renderer中ren1.AddActor(coneActor)# 为这个渲染器设置背景颜色ren1.SetBackground(colors.GetColor3d('pink'))# setViewport设定视窗大小在窗口的相对位置# 前两个参数为视窗的左上角相对位置# 后两个参数为视窗右下角的相对位置ren1.SetViewport(0.0, 0.0, 0.5, 1.0)# 再创建一个渲染器,用来显示我们创建的Actorren2 = vtkRenderer()ren2.AddActor(coneActor)ren2.SetBackground(colors.GetColor3d('yellow'))ren2.SetViewport(0.5, 0.0, 1.0, 1.0)# 通过vtkRenderWindow()创建一个窗口,用来接收Renderer渲染器。renWin = vtkRenderWindow()# 将创建的Renderer渲染器放进这个窗口里renWin.AddRenderer(ren1)renWin.AddRenderer(ren2)# 设置窗口大小renWin.SetSize(300, 300)# 设置窗口名称renWin.SetWindowName('Hello_World')for i in range(0, 360):# 渲染图片renWin.Render()# 调用摄像机,一度一度旋转视角ren1.GetActiveCamera().Azimuth(1)if __name__ == '__main__':main(sys.argv)

四、VTK对多个模型进行渲染,并操作物体属性

① VTK创建多个模型,可以通过创建多个vtkActor实现。

    # 创建一个vtkActorconeActor = vtkActor()# 创建第二个ActorconeActor2 = vtkActor()# 创建一个渲染器Renderer,用来显示我们创建的Actorren1 = vtkRenderer()# 将两个Actor放进这个渲染器Renderer中ren1.AddActor(coneActor)ren1.AddActor(coneActor2)

② 对于vtkActor属性的赋值操作,可以通过vtkProperty()实现

    # 创建一个vtkProperty(),通过property设置Actor参数property = vtkProperty()property.SetColor(colors.GetColor3d("red"))property.SetDiffuse(0.7)property.SetSpecular(0.4)property.SetSpecularPower(20)# property放入ActorconeActor2.SetProperty(property)

③ 可以通个SetPosition()设置vtkActor位置。

    # 控制位置coneActor2.SetPosition(0, 0, 5)

④ 整体代码

import sys
import vtk
from vtkmodules_vtkCommonColor import vtkNamedColors
from vtkmodules_vtkFiltersSources import vtkConeSource
from vtkmodules_vtkRenderingCore import vtkPolyDataMapper, vtkActor, vtkRenderer, vtkRenderWindow, vtkPropertydef main(argv):# 第一步,创建vtkNamedColors,为对象和背景选择颜色colors = vtkNamedColors()# 创建vtkConeSource实例cone = vtkConeSource()cone.SetHeight(5.0)cone.SetRadius(1.0)cone.SetResolution(10)# 创建一个MapperconeMapper = vtkPolyDataMapper()# 将vtkConeSource实例放入这个MapperconeMapper.SetInputConnection(cone.GetOutputPort())# 创建一个vtkActorconeActor = vtkActor()# 将之前创建的Mapper放入这个Actor中coneActor.SetMapper(coneMapper)# 为这个Actor设置颜色# https://www.fontke.com/tool/pickrgb/# (45,224,167)为其RGB值,这里需要除以255归一化。coneActor.GetProperty().SetColor(45/255, 224/255, 167/255)# 设置漫反射,漫反射系数(Diffuse): 光线照射到物体材质上,经过漫反射后形成的光线强度, 越大时,物体偏亮coneActor.GetProperty().SetDiffuse(1)# 设定反射色,光线照射到物体材质上,经过镜面反射后形成的光线强度coneActor.GetProperty().SetSpecular(0.4)# 镜面指数(Specular Power): 取值范围是0---128,该值越小,表示材质越是粗糙,当点光源发射的光线照射到上面时,可以产生较大的亮点,# 该值越大,表示材质越是类似于镜面,光源照射到上面后会产生较小的亮点;coneActor.GetProperty().SetSpecularPower(20)# 创建第二个ActorconeActor2 = vtkActor()# 将之前创建的Mapper放入这个Actor中coneActor2.SetMapper(coneMapper)# 创建一个vtkProperty(),通过property设置Actor参数property = vtkProperty()property.SetColor(colors.GetColor3d("red"))property.SetDiffuse(0.7)property.SetSpecular(0.4)property.SetSpecularPower(20)# property放入ActorconeActor2.SetProperty(property)# 控制位置coneActor2.SetPosition(0, 0, 5)# 创建一个渲染器Renderer,用来显示我们创建的Actorren1 = vtkRenderer()# 将两个Actor放进这个渲染器Renderer中ren1.AddActor(coneActor)ren1.AddActor(coneActor2)# 为这个渲染器设置背景颜色ren1.SetBackground(colors.GetColor3d('pink'))# 通过vtkRenderWindow()创建一个窗口,用来接收Renderer渲染器。renWin = vtkRenderWindow()# 将创建的Renderer渲染器放进这个窗口里renWin.AddRenderer(ren1)# 设置窗口大小renWin.SetSize(300, 300)# 设置窗口名称renWin.SetWindowName('Hello_World')for i in range(0, 360):# 渲染图片renWin.Render()# 调用摄像机,一度一度旋转视角ren1.GetActiveCamera().Azimuth(1)if __name__ == '__main__':main(sys.argv)

五、与渲染模型的交互

① 渲染模型的交互主要通过两种方式,移动摄像机的方式和移动模型的方式。

② 主要流程为:

(1)创建一个监听器,监听鼠标键盘事件,并设置要监听的窗口

  iren = vtkRenderWindowInteractor()iren.SetRenderWindow(renWin)

(2)设置交互形式,通过SetInteractorStyle转换相应的鼠标键盘操作。

    # 通过修改相机来改变观察角度和物体大小# vtkInteractorStyleTrackballActor:通过改变actor来改变物体的位置和大小。style = vtkInteractorStyleTrackballCamera()# 选择监听方式iren.SetInteractorStyle(style)

(3)初始化和启动

    # 初始化和启动。# 退出键盘e# 鼠标滚轮调整大小、按住鼠标右键调整远近、按住鼠标左键调整角度。iren.Initialize()iren.Start()

④ 整体代码

import sys
import vtk
from vtkmodules_vtkCommonColor import vtkNamedColors
from vtkmodules_vtkFiltersSources import vtkConeSource
from vtkmodules_vtkInteractionStyle import vtkInteractorStyleTrackballCamera
from vtkmodules_vtkRenderingCore import vtkPolyDataMapper, vtkActor, vtkRenderer, vtkRenderWindow, vtkProperty, \vtkRenderWindowInteractordef main(argv):# 第一步,创建vtkNamedColors,为对象和背景选择颜色colors = vtkNamedColors()# 创建vtkConeSource实例cone = vtkConeSource()cone.SetHeight(5.0)cone.SetRadius(1.0)cone.SetResolution(10)# 创建一个MapperconeMapper = vtkPolyDataMapper()# 将vtkConeSource实例放入这个MapperconeMapper.SetInputConnection(cone.GetOutputPort())# 创建一个vtkActorconeActor = vtkActor()# 将之前创建的Mapper放入这个Actor中coneActor.SetMapper(coneMapper)# 为这个Actor设置颜色# https://www.fontke.com/tool/pickrgb/# (45,224,167)为其RGB值,这里需要除以255归一化。coneActor.GetProperty().SetColor(45/255, 224/255, 167/255)# 设置漫反射,漫反射系数(Diffuse): 光线照射到物体材质上,经过漫反射后形成的光线强度, 越大时,物体偏亮coneActor.GetProperty().SetDiffuse(1)# 设定反射色,光线照射到物体材质上,经过镜面反射后形成的光线强度coneActor.GetProperty().SetSpecular(0.4)# 镜面指数(Specular Power): 取值范围是0---128,该值越小,表示材质越是粗糙,当点光源发射的光线照射到上面时,可以产生较大的亮点,# 该值越大,表示材质越是类似于镜面,光源照射到上面后会产生较小的亮点;coneActor.GetProperty().SetSpecularPower(20)# 创建一个渲染器Renderer,用来显示我们创建的Actorren1 = vtkRenderer()# 将Actor放进这个渲染器Renderer中ren1.AddActor(coneActor)# 为这个渲染器设置背景颜色ren1.SetBackground(colors.GetColor3d('pink'))# 通过vtkRenderWindow()创建一个窗口,用来接收Renderer渲染器。renWin = vtkRenderWindow()# 将创建的Renderer渲染器放进这个窗口里renWin.AddRenderer(ren1)# 设置窗口大小renWin.SetSize(300, 300)# 设置窗口名称renWin.SetWindowName('Hello_World')# vtkRenderWindowInteractor()监听键盘、鼠标等事件。iren = vtkRenderWindowInteractor()# 设置要监听的窗口iren.SetRenderWindow(renWin)# vtkInteractorStyleTrackballCamera# 通过修改相机来改变观察角度和物体大小# vtkInteractorStyleTrackballActor:通过改变actor来改变物体的位置和大小。style = vtkInteractorStyleTrackballCamera()# 选择监听方式iren.SetInteractorStyle(style)# 初始化# 退出键盘e# 鼠标滚轮调整大小、按住鼠标右键调整远近、按住鼠标左键调整角度。# 按住鼠标中键,可以拖动模型iren.Initialize()# 事件循环iren.Start()if __name__ == '__main__':main(sys.argv)

六、VTK模型的拉伸变换

① 3D组件设置

    # vtkBoxWidget()是一个正交六面体3D控件。# 这个3D小部件定义了一个区域,# 该区域由一个内表面角度为90度(正交面)的任意定向六面体表示。# 该对象创建了7个可在其上进行鼠标移动和操作的控制柄。# 此外,还显示了一个边界框轮廓,可以选择其“面”进行对象旋转或缩放。boxWidget = vtkBoxWidget()boxWidget.SetInteractor(iren)# 设置这个3D控件的大小,这里设置为模型的1.25倍boxWidget.SetPlaceFactor(1.25)# 设置边界框轮廓颜色boxWidget.GetOutlineProperty().SetColor(colors.GetColor3d('Gold'))

② 监听相应Actor

 # 3d模型Actor选择boxWidget.SetProp3D(coneActor)# 放置部件boxWidget.PlaceWidget()# 回调函数callback = vtkMyCallback()# 鼠标移动的时候调用,这个回调函数boxWidget.AddObserver('InteractionEvent', callback)# 可以通过按i选择是否显示这个组件。boxWidget.On()

③ 回调函数

class vtkMyCallback(object):def __call__(self, caller, ev):t = vtkTransform()widget = callerwidget.GetTransform(t)widget.GetProp3D().SetUserTransform(t)

④ 整体代码

import sys
import vtk
from vtkmodules_vtkCommonColor import vtkNamedColors
from vtkmodules_vtkCommonTransforms import vtkTransform
from vtkmodules_vtkFiltersSources import vtkConeSource
from vtkmodules_vtkInteractionStyle import vtkInteractorStyleTrackballCamera
from vtkmodules_vtkInteractionWidgets import vtkBoxWidget
from vtkmodules_vtkRenderingCore import vtkPolyDataMapper, vtkActor, vtkRenderer, vtkRenderWindow, vtkProperty, \vtkRenderWindowInteractordef main(argv):# 第一步,创建vtkNamedColors,为对象和背景选择颜色colors = vtkNamedColors()# 创建vtkConeSource实例cone = vtkConeSource()cone.SetHeight(5.0)cone.SetRadius(1.0)cone.SetResolution(10)# 创建一个MapperconeMapper = vtkPolyDataMapper()# 将vtkConeSource实例放入这个MapperconeMapper.SetInputConnection(cone.GetOutputPort())# 创建一个vtkActorconeActor = vtkActor()# 将之前创建的Mapper放入这个Actor中coneActor.SetMapper(coneMapper)# 为这个Actor设置颜色# https://www.fontke.com/tool/pickrgb/# (45,224,167)为其RGB值,这里需要除以255归一化。coneActor.GetProperty().SetColor(45/255, 224/255, 167/255)# 设置漫反射,漫反射系数(Diffuse): 光线照射到物体材质上,经过漫反射后形成的光线强度, 越大时,物体偏亮coneActor.GetProperty().SetDiffuse(1)# 设定反射色,光线照射到物体材质上,经过镜面反射后形成的光线强度coneActor.GetProperty().SetSpecular(0.4)# 镜面指数(Specular Power): 取值范围是0---128,该值越小,表示材质越是粗糙,当点光源发射的光线照射到上面时,可以产生较大的亮点,# 该值越大,表示材质越是类似于镜面,光源照射到上面后会产生较小的亮点;coneActor.GetProperty().SetSpecularPower(20)# 创建一个渲染器Renderer,用来显示我们创建的Actorren1 = vtkRenderer()# 将Actor放进这个渲染器Renderer中ren1.AddActor(coneActor)# 为这个渲染器设置背景颜色ren1.SetBackground(colors.GetColor3d('pink'))# 通过vtkRenderWindow()创建一个窗口,用来接收Renderer渲染器。renWin = vtkRenderWindow()# 将创建的Renderer渲染器放进这个窗口里renWin.AddRenderer(ren1)# 设置窗口大小renWin.SetSize(300, 300)# 设置窗口名称renWin.SetWindowName('Hello_World')# vtkRenderWindowInteractor()监听键盘、鼠标等事件。iren = vtkRenderWindowInteractor()# 设置要监听的窗口iren.SetRenderWindow(renWin)# vtkInteractorStyleTrackballCamera# 通过修改相机来改变观察角度和物体大小# vtkInteractorStyleTrackballActor:通过改变actor来改变物体的位置和大小。style = vtkInteractorStyleTrackballCamera()# 选择监听方式iren.SetInteractorStyle(style)# vtkBoxWidget()是一个正交六面体3D控件。# 这个3D小部件定义了一个区域,# 该区域由一个内表面角度为90度(正交面)的任意定向六面体表示。# 该对象创建了7个可在其上进行鼠标移动和操作的控制柄。# 此外,还显示了一个边界框轮廓,可以选择其“面”进行对象旋转或缩放。boxWidget = vtkBoxWidget()boxWidget.SetInteractor(iren)# 设置这个3D控件的大小,这里设置为模型的1.25倍boxWidget.SetPlaceFactor(1.25)# 设置边界框轮廓颜色boxWidget.GetOutlineProperty().SetColor(colors.GetColor3d('Gold'))# 小部件的典型用法是使用StartInteractionEvent、InteractionEvent和EndInteractionEvent事件。# 在鼠标移动时调用InteractionEvent;# 另外两个事件分别称为“按下按钮”和“按下按钮”(左键或右键)。# 3d模型Actor选择boxWidget.SetProp3D(coneActor)# 放置部件boxWidget.PlaceWidget()# 回调函数callback = vtkMyCallback()# 鼠标移动的时候调用,这个回调函数boxWidget.AddObserver('InteractionEvent', callback)# 可以通过按i选择是否显示这个组件。boxWidget.On()# 初始化和启动。# 退出键盘e# 鼠标滚轮调整大小、按住鼠标右键调整远近、按住鼠标左键调整角度。iren.Initialize()iren.Start()class vtkMyCallback(object):def __call__(self, caller, ev):t = vtkTransform()widget = callerwidget.GetTransform(t)widget.GetProp3D().SetUserTransform(t)if __name__ == '__main__':main(sys.argv)

七、总结

啊啊啊啊啊啊,最烦的就是这种没中文文档,然后资料又少的东西了

VTK+Python学习 ① 官方教程学习:渲染模型,监听模型事件,多个渲染视窗,渲染多个模型,与渲染模型交互,模型拉伸变换相关推荐

  1. 【从零开始的大数据学习】Flink官方教程学习笔记(一)

    Flink官方教程学习笔记 学习资源 基础Scala语法 Scala数据结构专题 声明变量 代码块 函数(function) 方法(methods) Traits (接口) class(类) tupl ...

  2. PCL学习笔记(二):PCL官方教程学习

    PCL学习笔记(二):PCL官方教程学习 PCD文件制作 Features 表面法线提取 Keypoints 提取NARF关键点 KdTree Range Image How to create a ...

  3. GTSAM 官方教程学习

    GTSAM官方教程学习 0. 前言 1. 因子图 1.1 序 1.2 因子图 1.2.1 贝叶斯网络 1.2.2 因子图 2. 运动建模 2.1 因子图建模 2.2 创建因子图 2.3 因子图与变量 ...

  4. 大白小课程-跟着官方教程学习Scratch3.0-P04制作音乐

    本文是视频教程:大白小课堂:跟着官方教程学习Scratch3.0系列的讲义版本,方便大家查阅 视频地址:https://www.bilibili.com/video/av54055338/ 我们今天一 ...

  5. python监听鼠标事件_Python中使用PyHook监听鼠标和键盘事件实例

    Python 中使用 PyHook 监听鼠标和键盘事件实例 PyHook 是一个基于 Python 的"钩子"库,主要用于监 听当前电脑上鼠标和键盘的事件.这个库依赖于另一个 Py ...

  6. electron 主进程向渲染进程发送事件,渲染进程监听事件

    主进程执行: //主进程向渲染进程发送消息win.webContents.send('ping', 'whoooooooh!') 渲染进程监听: <script>let ipcRender ...

  7. TensorFlow2.0 Guide官方教程 学习笔记20 -‘Effective TensorFlow 2‘

    本笔记参照TensorFlow Guide官方教程,主要是对'Effictive TensorFlow 2'教程内容翻译和内容结构编排,原文链接:Effictive TensorFlow 2 高效的T ...

  8. TensorFlow2.0 Guide官方教程 学习笔记17 -‘Using the SavedModel format‘

    本笔记参照TensorFlow官方教程,主要是对'Save a model-Training checkpoints'教程内容翻译和内容结构编排,原文链接:Using the SavedModel f ...

  9. Dynamic Quantization PyTorch官方教程学习笔记

    诸神缄默不语-个人CSDN博文目录 本文是PyTorch的教程Dynamic Quantization - PyTorch Tutorials 1.11.0+cu102 documentation的学 ...

最新文章

  1. 使用Nginx为Leanote配置Https
  2. markdown编辑器语法——背景色
  3. 夺冠!中国队国际奥数大赛再称雄,满分选手已保送清华姚班,“中国二队”并列第一...
  4. 13个初中级Python程序员练习的项目开发实战
  5. 万字长文总结八大经典内部排序算法
  6. VMware Workstation 8正式版下载+密钥序列号
  7. linux中mysql数据库启用日志记录_MYSQL启用日志,和查看日志
  8. java邮件中添加excel_使用java api 创建excel内容并发送邮件
  9. Image-to-Image Translation with conditional Adversarial Networks ---- Pix-2-Pix
  10. 如何在PFSense中设置故障转移和负载平衡
  11. CM3计算板读取SHT30以及I2C驱动
  12. 如何利用python语言实现对象数组
  13. Qt Creator 的 wxWidgets 模板包 (Linux下测试通过)
  14. 21 个编程的热门/冷门趋势
  15. java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet...
  16. 如何清除百度云管家计算机图标,怎么样删除我的电脑里的百度云管家图标
  17. 宇视网络摄像机存储功能配置指导
  18. 基于AntDesign组件的Vue项目
  19. 【数字图像处理】Hough变换C语言实现
  20. 差分隐私基础知识-上

热门文章

  1. 第二章(1) 初识P0,P1并口 数据类型,常量定义方法,特殊功能寄存器定义
  2. 第五十七讲 GPIO子系统
  3. django mysql视图_Django框架使用mysql视图操作示例
  4. mysql处理打卡外勤主键,联合主键约束更新不了数据
  5. Dragonfly Capital合伙人Mia Deng:2020年DeFi趋势(全文)
  6. oracle中删除yuj_oracle中可以使用drop、delete和truncate三个命令来删除数据库中的表...
  7. 电脑2或3分钟后自动进入休眠、黑屏
  8. 双系统下卸载deepin
  9. AutoHotkey编写自己的Warkey
  10. (智能车比赛)基于 ADS 逐飞库 英飞凌 TC264 377系列 的多核使用经验