Conversion Utils¶
supervision.utils.conversion.cv2_to_pillow(image: npt.NDArray[np.uint8]) -> Image.Image
¶
Converts an OpenCV image into a Pillow image, reordering channels from OpenCV's BGR(A) convention to Pillow's RGB(A).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
NDArray[uint8]
|
OpenCV image. Accepted shapes:
- |
required |
Returns:
| Type | Description |
|---|---|
Image
|
Input image converted to Pillow format. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
Examples:
>>> import numpy as np
>>> from supervision.utils.conversion import cv2_to_pillow
>>> scene = np.zeros((10, 10, 3), dtype=np.uint8)
>>> scene[:, :, 2] = 255
>>> image = cv2_to_pillow(scene)
>>> image.size
(10, 10)
>>> image.getpixel((0, 0))
(255, 0, 0)
Source code in src/supervision/utils/conversion.py
supervision.utils.conversion.pillow_to_cv2(image: Image.Image) -> npt.NDArray[np.uint8]
¶
Converts Pillow image into OpenCV image, handling RGB -> BGR conversion.
Every Pillow mode is reduced to the 8-bit layout OpenCV would hand back for the
same picture: an (H, W) grayscale array for single-channel modes and an
(H, W, 3) BGR array for everything else. Palette images are expanded to RGB so
palette indices are resolved to their actual colors, and CMYK ink values are
converted to color instead of being read as RGB plus an extra channel. Alpha is
dropped, matching cv2.imread with its default flags, so RGBA becomes BGR and
LA becomes grayscale. A 1-bit image becomes 0 and 255. An integer image
deeper than 8 bits (I;16 and its endian variants, or the signed 32-bit I) is
clipped to the 16-bit range and keeps its high byte, as cv2.imread does when
it reads a 16-bit PNG as 8-bit. A 32-bit float image is clipped to 0-255
the way Pillow's own convert("L") clips it.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Image
|
Pillow image in any mode. |
required |
Returns:
| Type | Description |
|---|---|
NDArray[uint8]
|
Input image converted to OpenCV format: |
NDArray[uint8]
|
single-channel modes or |
Examples:
>>> from PIL import Image
>>> from supervision.utils.conversion import pillow_to_cv2
>>> image = Image.new("RGB", (10, 10), color=(255, 0, 0))
>>> scene = pillow_to_cv2(image)
>>> scene.shape
(10, 10, 3)
>>> scene[0, 0].tolist()
[0, 0, 255]
>>> pillow_to_cv2(Image.new("1", (2, 2), color=1)).tolist()
[[255, 255], [255, 255]]
Source code in src/supervision/utils/conversion.py
supervision.utils.conversion.images_to_cv2(images: list[npt.NDArray[np.uint8] | Image.Image]) -> list[npt.NDArray[np.uint8]]
¶
Converts images provided either as Pillow images or OpenCV images into OpenCV format.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
list[NDArray[uint8] | Image]
|
Images to be converted |
required |
Returns:
| Type | Description |
|---|---|
list[NDArray[uint8]]
|
List of input images in OpenCV format (with order preserved). |