Using the Depth Sensing API
Depth Sensing Configuration
To enable depth sensing, set options in InitParameters when initializing the camera. For runtime adjustments—such as toggling depth computation or changing sensing modes—use RuntimeParameters while the camera is running.
For more information on depth configuration parameters, see Depth Settings.
Retrieving Depth Data
To obtain the depth map of a scene, first call grab() to capture a new frame, then use retrieveMeasure() to access the depth data aligned with the left image. The retrieveMeasure() function allows you to retrieve various types of data, including the depth map, confidence map, normal map, or point cloud, depending on the specified measure type.
Accessing Depth Values
The depth map is stored in a sl::Mat object, which acts as a 2D matrix where each element represents the distance from the camera to a specific point in the scene. Each pixel at coordinates (X, Y) contains a 32-bit floating-point value indicating the depth (Z) at that location, typically in millimeters unless otherwise configured.
To access the depth value at a particular pixel, use the getValue() method provided by the SDK. This allows you to retrieve the distance from the camera to the object at the specified pixel coordinates.
By default, depth values are expressed in millimeters. Units can be changed using InitParameters::coordinate_units. Advanced users can retrieve images, depth and points clouds either in CPU memory (default) or in GPU memory using retrieveMeasure(*, *, MEM_GPU).
Displaying Depth Image
The 32-bit depth map can be displayed as a grayscale 8-bit image
To display the depth map, the ZED SDK scales the real depth values to 8-bit values [0, 255], where 255 (white) represents the closest possible depth value and 0 (black) represents the most distant possible depth value. We call this process depth normalization.
To retrieve a depth image, you can use retrieveImage(depth, VIEW::DEPTH).
Do not use the 8-bit depth image in your application for other purposes than displaying depth.
Getting Point Cloud Data
The ZED camera can also provide a 3D point cloud, which is a collection of points in 3D space representing the scene. Each point in the point cloud corresponds to a pixel in the depth map and contains its (X, Y, Z) coordinates along with color information (RGBA).
A 3D point cloud with (X,Y,Z) coordinates and RGBA color can be retrieved using retrieveMeasure().
To access a specific pixel value, use getValue().
The point cloud stores its data on 4 channels using a 32-bit float for each channel. The last float is used to store color information, where R, G, B, and alpha channels (4 x 8-bit) are concatenated into a single 32-bit float.
You can choose between different color formats using XYZ<COLOR>. For example, BGRA color is available using retrieveMeasure(point_cloud, MEASURE::XYZBGRA).
Measuring distance in point cloud
When measuring distances, use the 3D point cloud instead of the depth map. The Euclidean distance formula allows us to calculate the distance of an object relative to the left eye of the camera.
Getting Normal Map
Retrieving Surface Normals
You can obtain a normal map by calling retrieveMeasure() with the NORMALS measure type. Surface normals are useful for applications such as traversability analysis and real-time lighting, as they describe the orientation of surfaces in the scene.
The normal map is stored as a 4-channel, 32-bit floating-point matrix, where the X, Y, and Z components represent the direction of the normal vector at each pixel. The fourth channel is unused.
To access the normal vector at a specific pixel, use the getValue() method, which returns the (X, Y, Z) components of the normal.
Adjusting Depth Resolution
To optimize performance and reduce data acquisition time, you can retrieve depth or point cloud data at a lower resolution by specifying the desired width and height in the retrieveMeasure() function. Additionally, you can choose whether the data is stored in CPU (RAM) or GPU memory by setting the appropriate memory type parameter. This flexibility allows you to balance processing speed and resource usage according to your application’s needs.
Code Example
For code examples, check out the Tutorial and Sample on GitHub.

