class_docstr: texture_atlas: An image, size 6N * 4N, with N * N squares for each of the 24 body parts.
          It must follow the grid found at https://github.com/facebookresearch/DensePose/blob/master/DensePoseData/demo_data/texture_atlas_200.png  # noqa
          For each body part, U is proportional to the x coordinate, and (1 - V) to y
code: def visualize(
      self,
      image_bgr: Image,
      results_and_boxes_xywh: Tuple[
          Optional[List[DensePoseChartResult]], Optional[Boxes]
      ],
  ) -> Image:
      densepose_result, boxes_xywh = results_and_boxes_xywh
      if densepose_result is None or boxes_xywh is None:
          return image_bgr
  
      boxes_xywh = boxes_xywh.int().cpu().numpy()
      texture_image, alpha = self.get_texture()
      for i, result in enumerate(densepose_result):
          iuv_array = torch.cat(
              (result.labels[None], result.uv.clamp(0, 1))
          )
          x, y, w, h = boxes_xywh[i]
          bbox_image = image_bgr[y : y + h, x : x + w]
          image_bgr[
              y : y + h, x : x + w
          ] = self.generate_image_with_texture(
              texture_image, alpha, bbox_image, iuv_array.cpu().numpy()
          )
      return image_bgr
  
file_path: detectron2/projects/DensePose/densepose/vis/densepose_results_textures.py
imports: import numpy
  from typing import List, Optional, Tuple
  import torch
  from detectron2.data.detection_utils import read_image
  from ..structures import DensePoseChartResult
  from .base import Boxes, Image
  from .densepose_results import DensePoseResultsVisualizer
label_desc: Use image node_id 2 for calling the DensePoseResultsVisualizerWithTexture obj's underlying member method code with example usage: obj.visualize(image_bgr, results_and_boxes_xywh) and returns: image_bgr, image_bgr