npy文件是无法直接打开的,它里面包含的是一个矩阵格式的数据,可以用于存储图像。为了对其进行可视化,需要将其转换为图像。这里需要用到numpy包以及matplotlib包,没有的话就pip install一下吧。现进入包含有npy文件的目录(我的该目录下有一个名为0000.npy的文件),然后打开一个终端,执行python进入python命令行模式,依次输入如下代码即可:

import numpy as np
import matplotlib.pyplot as plt
depthmap = np.load('0000.npy')    #使用numpy载入npy文件
plt.imshow(depthmap)              #执行这一行后并不会立即看到图像,这一行更像是将depthmap载入到plt里
# plt.colorbar()                   #添加colorbar
plt.savefig('depthmap.jpg')       #执行后可以将文件保存为jpg格式图像,可以双击直接查看。也可以不执行这一行,直接执行下一行命令进行可视化。但是如果要使用命令行将其保存,则需要将这行代码置于下一行代码之前,不然保存的图像是空白的
plt.show()                        #在线显示图像

#若要将图像存为灰度图,可以执行如下两行代码
import scipy.misc
scipy.misc.imsave("depth.png", depthmap)

在这里插入图片描述
在这里插入图片描述
  
  下面再贴一个将维度为[m,n]的深度图tensor进行可视化的代码,可以方便地应用于深度学习中产生的深度图上。

import torch
import cv2

# 该函数将深度值进行映射,生成带颜色的深度图
def visualize_scalars(scalar_tensor: torch.Tensor) -> np.ndarray:
    to_use = scalar_tensor.view(-1)
    while to_use.shape[0] > 2 ** 24:
        to_use = to_use[::2]
    with torch.inference_mode(False):
        mi = torch.quantile(to_use, 0.05)
        ma = torch.quantile(to_use, 0.95)

    scalar_tensor = (scalar_tensor - mi) / max(ma - mi, 1e-8)  # normalize to 0~1
    scalar_tensor = scalar_tensor.clamp_(0, 1)

    scalar_tensor = ((1 - scalar_tensor) * 255).byte().numpy()  # inverse heatmap
    return cv2.cvtColor(cv2.applyColorMap(scalar_tensor, cv2.COLORMAP_INFERNO), cv2.COLOR_BGR2RGB)

depthimg = torch.ones(height,width)    # 初始化一张height,width大小的图像(这里是全为1的tensor)
#########################
# 这里可以对depthimg进行赋值
#########################
scalarimg = visualize_scalars(depthimg)    # 进行scalar调节
cv2.imwrite(f'../../outdata/depthmap/depth.jpg', scalarimg)    # cv2写出深度图
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐