Image
Image
represents a 2D raster image with various pixel format. They are a special case of 2D Tensor with an optional 3rd dimension when multiple color channels are used. Image with 1 (grayscale), 3 (RGB), or 4 (RGBA) channels are supported. Color channel maybe represented by any of the common scalar datatypes:
uint8
,uint16
,uint32
,uint64
: Color channels in 0-max_uint
sRGB gamma space, alpha in 0-max_int
linear space.float16
,float32
,float64
: Color channels in the 0.0-1.0 sRGB gamma space, alpha in 0.0-1.0 linear space.int8
,int16
,int32
,int64
: If all pixels are positive, they are interpreted as their unsigned counterparts. Otherwise, the image is normalized before display (the pixel with the lowest value is black and the pixel with the highest value is white).
The colorrgba
component for the image applies a multiplicative tint.
Components and APIs
Primary component: tensor
Secondary components: colorrgba
, draw_order
Python APIs: log_image, log_image_file,
Rust API: Tensor
Simple Example
"""Create and log an image.""" import numpy as np import rerun as rr # Create an image with Pillow image = np.zeros((200, 300, 3), dtype=np.uint8) image[:, :, 0] = 255 image[50:150, 50:150] = (0, 255, 0) rr.init("rerun_example_images", spawn=True) rr.log_image("simple", np.array(image))

Advanced Example
"""Log an image.""" import tempfile from pathlib import Path import cv2 import numpy as np import rerun as rr from PIL import Image, ImageDraw # Save a transparent PNG to a temporary file. _, file_path = tempfile.mkstemp(suffix=".png") image = Image.new("RGBA", (300, 200), color=(0, 0, 0, 0)) draw = ImageDraw.Draw(image) draw.rectangle((0, 0, 300, 200), outline=(255, 0, 0), width=6) draw.rounded_rectangle((50, 50, 150, 150), fill=(0, 255, 0), radius=20) image.save(file_path) rr.init("rerun_example_images_adv", spawn=True) # Log the image from the file. rr.log_image_file("from_file", img_path=Path(file_path)) # Read with Pillow and NumPy, and log the image. image = np.array(Image.open(file_path)) rr.log_image("from_pillow_rgba", image) # Convert to RGB, fill transparent pixels with a color, and log the image. image_rgb = image[..., :3] image_rgb[image[:, :, 3] == 0] = (45, 15, 15) rr.log_image("from_pillow_rgb", image_rgb) # Read with OpenCV image = cv2.imread(file_path) # OpenCV uses BGR ordering, so we need to convert to RGB. image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) rr.log_image("from_opencv", image)
