@@ -36,12 +36,13 @@ def show_image(img, extent=None, axis=False, inline=True, grayscale=False):
3636 if inline :
3737 pil_im = Image .fromarray (img )
3838 plt .figure (figsize = [2 * x for x in plt .rcParams ["figure.figsize" ]])
39- plt .imshow (pil_im , extent = extent , cmap = ("gray" if grayscale else None ))
39+ img_plot = plt .imshow (pil_im , extent = extent , cmap = ("gray" if grayscale else None ))
4040 if not axis :
4141 plt .axis ("off" )
4242 plt .show ()
4343 else :
44- Image .fromarray (img ).show ()
44+ img_plot = Image .fromarray (img ).show ()
45+ return img_plot
4546
4647
4748def show_boxes_bev (
@@ -242,6 +243,7 @@ def show_image_with_boxes(
242243 with_mask = False ,
243244 show_IDs = True ,
244245 fontscale = 1 ,
246+ font_thickness = 3 ,
245247 show = True ,
246248 return_image = False ,
247249 addbox = [],
@@ -308,9 +310,9 @@ def show_image_with_boxes(
308310 bl_edge = (box .xmin , box .ymin )
309311 # add text
310312 if text is not None :
311- add_text_to_image (img1 , bl_edge , text [i ], fontscale = fontscale )
313+ add_text_to_image (img1 , bl_edge , text [i ], fontscale = fontscale , font_thickness = font_thickness )
312314 # add id
313- add_text_to_image (img1 , bl_edge , ID , fontscale = fontscale )
315+ add_text_to_image (img1 , bl_edge , ID , fontscale = fontscale , font_thickness = font_thickness )
314316 elif (
315317 isinstance (box , (Box3D , BasicBoxTrack3D ))
316318 or (
@@ -385,7 +387,7 @@ def show_image_with_boxes(
385387 return img1
386388
387389
388- def add_text_to_image (img , bl_edge , text , fontscale = 1 ):
390+ def add_text_to_image (img , bl_edge , text , fontscale = 1 , font_thickness = 3 ):
389391 if text is not None :
390392 # name on top of box
391393 font = cv2 .FONT_HERSHEY_SIMPLEX
@@ -395,7 +397,6 @@ def add_text_to_image(img, bl_edge, text, fontscale=1):
395397 max (edge , bl_edge [1 ] - sep )
396398 )
397399 fontColor = (255 , 255 , 255 )
398- font_thickness = 2
399400 lineType = 2
400401 x , y = bottomLeftCornerOfText
401402 dy = 10
@@ -439,6 +440,7 @@ def show_lidar_bev_with_boxes(
439440 rescale : bool = True ,
440441 show : bool = True ,
441442 return_image : bool = False ,
443+ scale_return_image : bool = False ,
442444):
443445 """
444446 Show lidar and the detection results (optional) in BEV
@@ -473,6 +475,20 @@ def show_lidar_bev_with_boxes(
473475 else :
474476 pc2 = pc .data
475477
478+ # update extent
479+ if extent is not None :
480+ extent_max = [
481+ (min (pc [:, 0 ]), max (pc [:, 1 ])),
482+ (min (pc [:, 1 ]), max (pc [:, 1 ])),
483+ (min (pc [:, 2 ]), max (pc [:, 2 ]))
484+ ]
485+ extent_use = []
486+ for ex , ex_max in zip (extent , extent_max ):
487+ ex_in = [e1 if e1 is not None else em for e1 , em in zip (ex , ex_max )]
488+ extent_use .append (tuple (ex_in ))
489+ else :
490+ extent_use = extent
491+
476492 # Get maxes and mins
477493 if rescale :
478494 if pc2 .shape [0 ] > 0 :
@@ -486,9 +502,9 @@ def show_lidar_bev_with_boxes(
486502 min_width = 0
487503 max_width = 0
488504 else :
489- assert extent is not None
490- min_range , max_range = extent [0 ]
491- min_width , max_width = extent [1 ]
505+ assert extent_use is not None
506+ min_range , max_range = extent_use [0 ]
507+ min_width , max_width = extent_use [1 ]
492508
493509 boxes_show = []
494510 boxes_show_corners = []
@@ -523,21 +539,27 @@ def show_lidar_bev_with_boxes(
523539 min_width = min (min_width , min (bev_corners [:, 1 ]) - 2 )
524540 max_width = max (max_width , max (bev_corners [:, 1 ]) + 2 )
525541
542+ # update extent with new ranges/widths
543+ extent_use [0 ] = (min (min_range , extent_use [0 ][0 ]), max (max_range , extent_use [0 ][1 ]))
544+ extent_use [1 ] = (min (min_width , extent_use [1 ][0 ]), max (max_width , extent_use [1 ][1 ]))
545+
526546 # define the size of the image and scaling factor
527547 if background_color == "black" :
528548 img1 = 0 * np .ones ([bev_size [0 ], bev_size [1 ], 3 ], dtype = np .uint8 )
529549 elif background_color == "white" :
530550 img1 = 255 * np .ones ([bev_size [0 ], bev_size [1 ], 3 ], dtype = np .uint8 )
531551 else :
532552 raise NotImplementedError (background_color )
533- if extent is None :
553+
554+ # get scaling
555+ if extent_use is None :
534556 width_scale = (max_width - min_width ) / bev_size [0 ]
535557 range_scale = (max_range - min_range ) / bev_size [1 ]
536558 min_arr = np .array ([min_range , min_width ])
537559 else :
538- width_scale = (extent [1 ][1 ] - extent [1 ][0 ]) / bev_size [0 ]
539- range_scale = (extent [0 ][1 ] - extent [0 ][0 ]) / bev_size [1 ]
540- min_arr = np .array ([extent [0 ][0 ], extent [1 ][0 ]])
560+ width_scale = (extent_use [1 ][1 ] - extent_use [1 ][0 ]) / bev_size [0 ]
561+ range_scale = (extent_use [0 ][1 ] - extent_use [0 ][0 ]) / bev_size [1 ]
562+ min_arr = np .array ([extent_use [0 ][0 ], extent_use [1 ][0 ]])
541563 sc_arr = np .array ([range_scale , width_scale ])
542564 pc_bev = (pc2 [:, [0 , 1 ]] - min_arr ) / sc_arr
543565
@@ -646,10 +668,11 @@ def plot_line(img1, line, line_color):
646668 else :
647669 raise RuntimeError ("Unknown line type" )
648670
649- if extent is None :
650- viz_extent = [min_range , max_range , min_width , max_width ]
671+ nominal_extent = [min_range , max_range , min_width , max_width ]
672+ if extent_use is None :
673+ viz_extent = nominal_extent
651674 else :
652- viz_extent = [* extent [0 ], * extent [1 ]]
675+ viz_extent = [* extent_use [0 ], * extent_use [1 ]]
653676
654677 if flipx :
655678 img1 = np .flip (img1 , axis = 1 )
@@ -662,6 +685,15 @@ def plot_line(img1, line, line_color):
662685 viz_extent = [viz_extent [2 ], viz_extent [3 ], viz_extent [0 ], viz_extent [1 ]]
663686
664687 if show :
665- show_image (img1 , extent = viz_extent , inline = inline )
688+ img_plot = show_image (img1 , extent = viz_extent , inline = inline )
689+ image_array = img_plot .get_array ()
690+
666691 if return_image :
667- return img1
692+ if scale_return_image :
693+ scale_ratio = width_scale / range_scale
694+ dx = bev_size [0 ]* scale_ratio if scale_ratio > 1 else bev_size [0 ]
695+ dy = bev_size [1 ]/ scale_ratio if scale_ratio < 1 else bev_size [1 ]
696+ new_size = (int (dx ), int (dy ))
697+ return cv2 .resize (img1 , new_size )
698+ else :
699+ return img1
0 commit comments