Método de almacenamiento de imágenes con una profundidad de 16 bits: comparación entre el formato opencv png y el formato numpy npy

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.
inserte la descripción de la imagen aquí
np.save: Los datos obtenidos ocupan mucho espacio. El ejemplo anterior obtiene El tamaño del npy es de 4,68 MB.
inserte la descripción de la imagen aquí
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
inserte la descripción de la imagen aquí

Puedes elegir según tus necesidades

Supongo que te gusta

Origin blog.csdn.net/SmaICG/article/details/130202932
Recomendado
Clasificación