def __init__(self, view): self.view = view self.depthImage = None self.pointCloudObj = None self.renderObserver = None self.windowToDepthBuffer = vtk.vtkWindowToImageFilter() self.windowToDepthBuffer.SetInput(self.view.renderWindow()) self.windowToDepthBuffer.SetInputBufferTypeToZBuffer() self.windowToDepthBuffer.ShouldRerenderOff() self.windowToColorBuffer = vtk.vtkWindowToImageFilter() self.windowToColorBuffer.SetInput(self.view.renderWindow()) self.windowToColorBuffer.SetInputBufferTypeToRGB() self.windowToColorBuffer.ShouldRerenderOff() useBackBuffer = False if useBackBuffer: self.windowToDepthBuffer.ReadFrontBufferOff() self.windowToColorBuffer.ReadFrontBufferOff() self.initDepthImageView() self.initPointCloudView() self._block = False self.singleShotTimer = TimerCallback() self.singleShotTimer.callback = self.update
def saveScreenshot(view, filename, shouldRender=True, shouldWrite=True): if shouldRender: view.forceRender() grabber = vtk.vtkWindowToImageFilter() grabber.SetInput(view.renderWindow()) grabber.SetInputBufferTypeToRGB() grabber.ReadFrontBufferOff() grabber.SetShouldRerender(False) grabber.Update() if shouldWrite: io.writeImage(grabber.GetOutput(), filename) return grabber.GetOutput()
def render_depth(renWin, renderer, camera, data_dir, data_dir_name, num_im, out_dir, use_mesh, object_dir, mesh='meshed_scene.ply', keyword=None): actor = vtk.vtkActor() filter1 = vtk.vtkWindowToImageFilter() imageWriter = vtk.vtkPNGWriter() scale = vtk.vtkImageShiftScale() if use_mesh: #use meshed version of scene if not glob.glob(data_dir + "/" + mesh): out = None if glob.glob(data_dir + "/original_log.lcmlog.ply"): out = "original_log.lcmlog.ply" elif glob.glob(data_dir + "/trimmed_log.lcmlog.ply"): out = "trimmed_log.lcmlog.ply" elif glob.glob('*.ply'): out = glob.glob('*.ply')[0] else: return mesher = mesh_wrapper.Mesh(out_dir=data_dir) status = mesher.mesh_cloud(out) print status #blocks until done mapper = vtk.vtkPolyDataMapper() fileReader = vtk.vtkPLYReader() fileReader.SetFileName(data_dir + "/" + mesh) mapper.SetInputConnection(fileReader.GetOutputPort()) actor.SetMapper(mapper) renderer.AddActor(actor) else: #import just the objects objects = common.Objects(data_dir, object_dir) objects.loadObjectMeshes("/registration_result.yaml", renderer, keyword=keyword) #setup filters filter1.SetInput(renWin) filter1.SetMagnification(1) filter1.SetInputBufferTypeToZBuffer() windowToColorBuffer = vtk.vtkWindowToImageFilter() windowToColorBuffer.SetInput(renWin) windowToColorBuffer.SetInputBufferTypeToRGB() scale.SetOutputScalarTypeToUnsignedShort() scale.SetScale(1000) poses = common.CameraPoses(data_dir + "/posegraph.posegraph") for i in range(1, num_im + 1): try: utimeFile = open( data_dir + "/images/" + str(i).zfill(10) + "_utime.txt", 'r') utime = int(utimeFile.read()) #update camera transform cameraToCameraStart = poses.getCameraPoseAtUTime(utime) t = cameraToCameraStart common.setCameraTransform(camera, t) renWin.Render() #update filters filter1.Modified() filter1.Update() windowToColorBuffer.Modified() windowToColorBuffer.Update() #extract depth image depthImage = vtk.vtkImageData() pts = vtk.vtkPoints() ptColors = vtk.vtkUnsignedCharArray() vtk.vtkDepthImageUtils.DepthBufferToDepthImage( filter1.GetOutput(), windowToColorBuffer.GetOutput(), camera, depthImage, pts, ptColors) scale.SetInputData(depthImage) scale.Update() #write out depth image imageWriter.SetFileName(out_dir + str(i).zfill(10) + "_" + data_dir_name + "_depth_ground_truth.png") imageWriter.SetInputConnection(scale.GetOutputPort()) imageWriter.Write() except (IOError): break renderer.RemoveAllViewProps() renWin.Render()
def render_normals(renWin, renderer, camera, data_dir, data_dir_name, num_im, out_dir, use_mesh, object_dir, mesh='meshed_scene.ply', keyword=None): #setup rendering enviornment actor = vtk.vtkActor() filter1 = vtk.vtkWindowToImageFilter() imageWriter = vtk.vtkPNGWriter() scale = vtk.vtkImageShiftScale() if use_mesh: #use meshed version of scene if not glob.glob(data_dir + "/" + mesh): out = "original_log.lcmlog.ply" if glob.glob( data_dir + "/original_log.lcmlog.ply") else "trimmed_log.lcmlog.ply" mesher = mesh_wrapper.Mesh(out_dir=data_dir) status = mesher.mesh_cloud(out) print status #blocks until done mapper = vtk.vtkPolyDataMapper() #shading #set_material_prop(actor) set_shader_input(mapper) fileReader = vtk.vtkPLYReader() fileReader.SetFileName(data_dir + "/" + mesh) mapper.SetInputConnection(fileReader.GetOutputPort()) actor.SetMapper(mapper) renderer.AddActor(actor) else: #import just the objects objects = common.Objects(data_dir, object_dir) objects.loadObjectMeshes("/registration_result.yaml", renderer, keyword=keyword, shader=set_shader_input) #setup rendering enviornment windowToColorBuffer = vtk.vtkWindowToImageFilter() windowToColorBuffer.SetInput(renWin) windowToColorBuffer.SetInputBufferTypeToRGB() #setup camera calibration common.set_up_camera_params(camera) poses = common.CameraPoses(data_dir + "/posegraph.posegraph") for i in range(1, num_im + 1): try: utimeFile = open( data_dir + "/images/" + str(i).zfill(10) + "_utime.txt", 'r') utime = int(utimeFile.read()) #update camera transform cameraToCameraStart = poses.getCameraPoseAtUTime(utime) t = cameraToCameraStart common.setCameraTransform(camera, t) renWin.Render() windowToColorBuffer.Modified() windowToColorBuffer.Update() #write out depth image imageWriter.SetFileName(out_dir + str(i).zfill(10) + "_" + data_dir_name + "_normal_ground_truth.png") imageWriter.SetInputConnection(windowToColorBuffer.GetOutputPort()) imageWriter.Write() except (IOError): break renderer.RemoveAllViewProps() renWin.Render()
if __name__ == '__main__': #setup view_height = 640 view_width = 480 data_dir = sys.argv[1] num_im = int(sys.argv[2]) mesh = sys.argv[3] mapper = vtk.vtkPolyDataMapper() actor = vtk.vtkActor() renderer = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() interactor = vtk.vtkRenderWindowInteractor() fileReader = vtk.vtkPLYReader() filter1 = vtk.vtkWindowToImageFilter() imageWriter = vtk.vtkBMPWriter() scale = vtk.vtkImageShiftScale() fileReader.SetFileName(sys.argv[1] + "/" + sys.argv[3]) renWin.SetSize(view_height, view_width) camera = vtk.vtkCamera() renderer.SetActiveCamera(camera) mapper.SetInputConnection(fileReader.GetOutputPort()) actor.SetMapper(mapper) renderer.AddActor(actor) renWin.AddRenderer(renderer) interactor.SetRenderWindow(renWin) setCameraInstrinsicsAsus(camera)
### setup rendering enviornment for point cloud renderer1 = vtk.vtkRenderer() renderer1.SetViewport(0.5, 0, 1, 1) camera1 = vtk.vtkCamera() renderer1.SetActiveCamera(camera1) renWin.AddRenderer(renderer1) common.set_up_camera_params(camera1) renSource = vtk.vtkRendererSource() renSource.SetInput(renderer) renSource.WholeWindowOff() renSource.DepthValuesOnlyOn() renSource.Update() ####setup filters filter1 = vtk.vtkWindowToImageFilter() scale = vtk.vtkImageShiftScale() filter1.SetInput(renWin) filter1.SetMagnification(1) filter1.SetInputBufferTypeToZBuffer() windowToColorBuffer = vtk.vtkWindowToImageFilter() windowToColorBuffer.SetInput(renWin) windowToColorBuffer.SetInputBufferTypeToRGB() scale.SetOutputScalarTypeToUnsignedShort() scale.SetScale(1000) out_dir = "/media/drc/DATA/chris_labelfusion/RGBDCNN/" object_dir = "/media/drc/DATA/chris_labelfusion/object-meshes" out_file = "/media/drc/DATA/chris_labelfusion/RGBDCNN/stats.yaml" stats = {}