El mapa de profundidad obtenido por lidar o estimación de profundidad generalmente es de tipo float32 o float64, que tiene una gran cantidad de datos. Al guardarlo como una imagen de formato jpg común (uint8: 80-255), la precisión de los datos se perderá. Si se guarda como un archivo .npy A veces, el tamaño del archivo es demasiado grande (p. ej., la matriz de profundidad de 1280*1920 ocupa 37,5 Mb después de guardar), por lo que es necesario procesar los datos antes de guardarlos.
1. Considere la posibilidad de convertir datos float32 a datos uint16 o int16 en función de la información de precisión del mapa de profundidad. Por ejemplo, la unidad del mapa de profundidad obtenida por el lidar de uso común es metros, y tomamos la precisión como centímetros, luego la matriz depth_map_m (1280x1920) que contiene información de profundidad se convierte de metros La unidad de float64 se convierte a uint16 en centímetros, depth_map_cm
depth_map_cm = depth_map_m * 100
depth_map_cm_uint16 = depth_map_cm.astype(np.uint16)
2.1 Los 16 mapas de profundidad se pueden almacenar en png, tif y otros formatos
cv2.imwrite(save_dir, depth_map_cm_uint16)
2.2 También puede almacenar el mapa de profundidad 16 en formato npy
np.save(save_dir, depth_map_cm_uint16)
Opciones de almacenamiento:
Los dos métodos de almacenamiento tienen sus propias ventajas y desventajas:
En términos de espacio de almacenamiento:
cv2.imwrite: Los datos obtenidos están comprimidos, por lo que ocupan menos espacio. El tamaño png obtenido en el ejemplo anterior es de solo 521 kb.
np.save: Los datos obtenidos ocupan mucho espacio. El ejemplo anterior obtiene El tamaño del npy es de 4,68 MB.
En términos de velocidad de lectura:
cv2.imwrite: la carga posterior de datos es relativamente lenta y el tiempo de carga del ejemplo anterior es de aproximadamente 0,017 s
np.save: la carga posterior de datos es rápida y el tiempo de carga del ejemplo anterior es de aproximadamente 0,003 s
Puedes elegir según tus necesidades