class_docstr: Bounding Box representation.
  
  Should **not** be instantiated directly, instead use `from_*` methods.
  e.g. `from_xyxy`, `from_xywh`.
  Is able to transform coordinates into different formats,
  e.g. `xyxy`, `xywh`.
  
  # Examples
  
  Create from `xywh` format, and get `xyxy` coordinates.
  ```python
  bbox = BBox.from_xywh(1, 1, 4, 4)
  xyxy = bbox.xyxy
  ```
class_docstr_tok: ["Bounding","Box","representation",".","Should","*","*","not","*","*","be","instantiated","directly",",","instead","use","`","from_","*","`","methods",".","e.g",".","`","from_xyxy","`",",","`","from_xywh","`",".","Is","able","to","transform","coordinates","into","different","formats",",","e.g",".","`","xyxy","`",",","`","xywh","`",".","#","Examples","Create","from","`","xywh","`","format",",","and","get","`","xyxy","`","coordinates",".","``","`","python","bbox","=","BBox.from_xywh","(","1",",","1",",","4",",","4",")","xyxy","=","bbox.xyxy","``","`"]
code: def from_relative_xcycwh(cls, xc, yc, bw, bh, img_width, img_height):
      # subtracting 0.5 goes from center to left/upper edge, adding goes to right/bottom
      pnts = [
          (xc - 0.5 * bw),
          (yc - 0.5 * bh),
          (xc + 0.5 * bw),
          (yc + 0.5 * bh),
      ]
      # convert from relative to absolute coordinates
      scale = np.array([img_width, img_height, img_width, img_height])
      xl, yu, xr, yb = np.around(pnts * scale).astype(int).tolist()
      return cls.from_xyxy(xl, yu, xr, yb)
  
file_path: icevision/icevision/core/bbox.py
imports: from icevision.imports import *
  from icevision.utils import *
  from .exceptions import *
label_desc: Use image node_id 15 for calling the BBox obj's underlying member method code with example usage: obj.from_relative_xcycwh(cls, xc, yc, bw, bh, img_width, img_height) and returns: cls