code: def _depth_im_from_pointcloud(self, msg):
          
          # set format
          if self._format is None:
              self._set_format(msg)
  
          # rescale camera intr in case binning is turned on
          if msg.height != self._camera_intr.height:
              rescale_factor = float(msg.height) / self._camera_intr.height
              self._camera_intr = self._camera_intr.resize(rescale_factor)
              
          # read num points
          num_points = msg.height * msg.width
              
          # read buffer
          raw_tup = struct.Struct(self._format).unpack_from(msg.data, 0)
          raw_arr = np.array(raw_tup)
  
          # subsample depth values and reshape
          depth_ind = 2 + 4 * np.arange(num_points)
          depth_buf = raw_arr[depth_ind]
          depth_arr = depth_buf.reshape(msg.height, msg.width)
          depth_im = DepthImage(depth_arr, frame=self._frame)
  
          return depth_im
docs: Convert a pointcloud2 message to a depth image.