def addLaneToImg(self, I, lanes_wrt_mbly): """Takes an image and the 3d lane points. Projects these points onto the image """ if lanes_wrt_mbly.shape[0] == 0: return None pix = [] for i in xrange(len(self.mbly_vtk_lanes)): type = int(lanes_wrt_mbly[i, 5]) color = self.mbly_lane_color[type] * 255 size = self.mbly_lane_size[type] subsamp = self.mbly_lane_subsamp[type] pts = self.getLanePointsFromModel(lanes_wrt_mbly[i])[::subsamp] if pts is None: continue proj_pts = projectPoints(pts, self.args, self.mbly_T, self.mbly_R) proj_pts = proj_pts[:, 3:].astype(np.int32, copy = False) img_mask = (proj_pts[:, 0] < 1280) & (proj_pts[:, 0] >= 0) &\ (proj_pts[:, 1] < 800) & (proj_pts[:, 1] >= 0) proj_pts = proj_pts[img_mask] for pt_i in xrange(proj_pts.shape[0]): # cv2 only takes tuples at points pt = tuple(proj_pts[pt_i, :]) # Make sure to convert to bgr cv2.circle(I, pt, size, color[::-1], thickness=-size) return I
def addLaneToImg(self, I, lanes_wrt_mbly): """Takes an image and the 3d lane points. Projects these points onto the image """ if lanes_wrt_mbly.shape[0] == 0: return None pix = [] for i in xrange(len(self.mbly_vtk_lanes)): type = int(lanes_wrt_mbly[i, 5]) color = self.mbly_lane_color[type] * 255 size = self.mbly_lane_size[type] subsamp = self.mbly_lane_subsamp[type] pts = self.getLanePointsFromModel(lanes_wrt_mbly[i])[::subsamp] if pts is None: continue proj_pts = projectPoints(pts, self.args, self.mbly_T, self.mbly_R) proj_pts = proj_pts[:, 3:].astype(np.int32, copy=False) img_mask = (proj_pts[:, 0] < 1280) & (proj_pts[:, 0] >= 0) &\ (proj_pts[:, 1] < 800) & (proj_pts[:, 1] >= 0) proj_pts = proj_pts[img_mask] for pt_i in xrange(proj_pts.shape[0]): # cv2 only takes tuples at points pt = tuple(proj_pts[pt_i, :]) # Make sure to convert to bgr cv2.circle(I, pt, size, color[::-1], thickness=-size) return I
def addObjToImg(self, I, objs_wrt_mbly): """Takes an image and the mbly objects. Converts the objects into corners of a bounding box and draws them on the image """ if objs_wrt_mbly.shape[0] == 0: return None pix = [] width = objs_wrt_mbly[:, 4] # Assuming the point in obs_wrt_mbly are the center of the object, draw # a box .5 m below, .5 m above, -.5*width left, .5*width right. Keep the # same z position for z in [-.5, .5]: for y in [-.5, .5]: offset = np.zeros((width.shape[0], 3)) offset[:, 1] = width*y offset[:, 2] = z pt = objs_wrt_mbly[:, :3] + offset proj_pt = projectPoints(pt, self.args, self.mbly_T, self.mbly_R) pix.append(proj_pt[:, 3:]) pix = np.array(pix, dtype=np.int32) pix = np.swapaxes(pix, 0, 1) # Draw a line between projected points for i, corner in enumerate(pix): # Get the color of the box and convert RGB -> BGR color = self.mbly_obj_colors[int(objs_wrt_mbly[i, 5])][::-1] * 255 corner = tuple(map(tuple, corner)) cv2.rectangle(I, corner[0], corner[3], color, 2) return I
def addObjToImg(self, I, objs_wrt_mbly): """Takes an image and the mbly objects. Converts the objects into corners of a bounding box and draws them on the image """ if objs_wrt_mbly.shape[0] == 0: return None pix = [] width = objs_wrt_mbly[:, 4] # Assuming the point in obs_wrt_mbly are the center of the object, draw # a box .5 m below, .5 m above, -.5*width left, .5*width right. Keep the # same z position for z in [-.5, .5]: for y in [-.5, .5]: offset = np.zeros((width.shape[0], 3)) offset[:, 1] = width * y offset[:, 2] = z pt = objs_wrt_mbly[:, :3] + offset proj_pt = projectPoints(pt, self.args, self.mbly_T, self.mbly_R) pix.append(proj_pt[:, 3:]) pix = np.array(pix, dtype=np.int32) pix = np.swapaxes(pix, 0, 1) # Draw a line between projected points for i, corner in enumerate(pix): # Get the color of the box and convert RGB -> BGR color = self.mbly_obj_colors[int(objs_wrt_mbly[i, 5])][::-1] * 255 corner = tuple(map(tuple, corner)) cv2.rectangle(I, corner[0], corner[3], color, 2) return I