I am using ZED 2i camera (both 2.1mm and 4mm). I tried to save the depth map but I got alot of 0 values in it. I am using neural_plus mode but still got such results. What could be the potential reasons for such inaccuracies?
I remember when I was taking pictures at 5mtr height so the platform I was on was little wobbly( not so stable). Can this be the reason for such zereos? If there are other reasons please tell. The code with with I am capturing the data is:
import cv2
import pyzed.sl as sl
import math
from datetime import datetime
import os
import numpy as np
from SetupLogger import setup_logging
# Setup logging
logger = setup_logging('ZED_Data_acquisition/camera_application.log')
def create_folder(path):
try:
if not os.path.exists(path):
os.makedirs(path)
logger.info(f"Created folder: {path}")
else:
logger.info(f"Folder already exists: {path}")
except Exception as e:
logger.error(f"Failed to create folder: {path}, Error: {e}")
if __name__ == "__main__":
try:
folder_path="Test_Dataset_08Nov24/Narrow_Angle"
create_folder(folder_path)
# Create a Camera object
cam = sl.Camera()
# Create an InitParameters object and set configuration parameters
cam_init_params = sl.InitParameters()
cam_init_params.camera_resolution = sl.RESOLUTION.HD2K
cam_init_params.camera_fps = 15
# Depth Modes Available: NEURAL_PLUS (latest 4.1 SDK), NEURAL, ULTRA, QUALITY, PERFORMANCE(default)
cam_init_params.depth_mode = sl.DEPTH_MODE.NEURAL_PLUS
cam_init_params.depth_stabilization = 100 # It is True by default and stablizes the image
cam_init_params.coordinate_units = sl.UNIT.MILLIMETER
cam_init_params.depth_minimum_distance = 600 # min possible 15 cm/ 150 mm/ 0.15 mtrs - Set to 60cm
cam_init_params.depth_maximum_distance = 35000 # Setting maximum depth perception distance to 35m
# Open the camera
status = cam.open(cam_init_params)
if status != sl.ERROR_CODE.SUCCESS:
logger.error(f"Failed to open camera: {status}")
raise Exception(f"Failed to open camera: {status}")
# Set the selected sensor for retrieving the image: from the left sensor
view = sl.VIEW.LEFT
measure_depth = sl.MEASURE.DEPTH
cam_runtime_parameters = sl.RuntimeParameters()
logger.info("Stream View. Press 's' to save image and cloud points")
logger.info("Stream View. Press 'q' to exit")
frame_time_ms = int(1000 / 30)
while True:
try:
zed_image = sl.Mat()
zed_point_cloud = sl.Mat()
zed_depth_map = sl.Mat()
if cam.grab(cam_runtime_parameters) == sl.ERROR_CODE.SUCCESS:
cam.retrieve_image(zed_image, view)
cam.retrieve_measure(zed_point_cloud, point_cloud_mode)
cam.retrieve_measure(zed_depth_map, measure_depth)
image = zed_image.get_data()
points_cloud = zed_point_cloud.get_data()
depth = zed_depth_map.get_data()
x = int(zed_image.get_width() / 2)
y = int(zed_image.get_height() / 2)
cv2.circle(image, (x, y), 5, (0, 255, 0), thickness=1)
cv2.imshow("Image1", image)
key = cv2.waitKey(5)
if key == ord('s'):
file_name = datetime.now().strftime("%Y%m%d_%H%M%S")
cv2.imwrite(folder_path + file_name + ".png", image)
zed_depth_map.write(folder_path + file_name + ".pgm")
logger.info(f"Saved Image and Depth Map as {file_name}")
if key == ord('q'):
break
except Exception as e:
logger.error(f"Runtime error: {e}")
except Exception as e:
logger.critical(f"Critical error in main: {e}")
finally:
status = cam.close()
logger.info(f"Camera closed with status: {status}")