python脚本:根据视差图制作npy格式的深度信息文件

11 篇文章 1 订阅
10 篇文章 0 订阅

前提:你有一些disp(视差)图,例如我是在“”/home/lj/workspace/open-npy/img_d/”文件夹下有disp_1.bmp、disp_2.bmp、disp_3.bmp、disp_4.bmp四张视差图,来制作disp_re_1.npy、disp_re_2.npy、disp_re_3.npy、disp_re_4.npy深度信息的numpy格式压缩文件
视差图转深度信息就不在此赘述了,只需将
cl_depth = 7.2413060526743269e4/cl_disp/1000
中的相机内参调为自己对应的即可

import numpy as np
from PIL import Image
list1=[]
list2=[]
list3=[]
def make_npy():
    global list1,list2,list3
    im = Image.open(image_path)
    width, height = im.size
    for i in range (0,height):
        for j in range (0,width):
            cl_disp = im.getpixel((j,i))
            if cl_disp==0:
                cl_depth=0
            else:
                cl_depth = 7.2413060526743269e4/cl_disp/1000
            list1.append(cl_depth)
            list2.append(list1)
            list1=[]
        list3.append(list2)
        list2=[]
    d_info=np.array(list3)
    list3=[]
    return d_info
if __name__ == '__main__':
    for k in range (0,4):
        image_path = "/home/lj/workspace/open-npy/img_d/disp_{}.bmp".format(k)
        depth_info=make_npy()
        np.save("/home/lj/workspace/open-npy/img_d/disp_re_{}.npy".format(k),depth_info)
        print "saved successful!"
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取深度图的方法: 首先,需要使用深度学习模型来预测图像的深度信息。可以使用现有的深度学习框架,例如 TensorFlow 或 PyTorch,来训练一个深度学习模型。这个模型需要输入一张图片,输出对应的深度图。 以下是一个使用 PyTorch 实现的获取深度图的例子: ```python import torch import torchvision.transforms as transforms from PIL import Image # 加载深度学习模型 model = torch.load('depth_prediction_model.pth') # 加载图片 img = Image.open('test.jpg') # 对图片进行预处理 transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) img_tensor = transform(img) img_tensor = img_tensor.unsqueeze(0) # 预测深度图 with torch.no_grad(): depth_map = model(img_tensor) # 将深度图转换为 numpy 数组 depth_map = depth_map.squeeze().cpu().numpy() # 显示深度图 import matplotlib.pyplot as plt plt.imshow(depth_map, cmap='gray') plt.show() ``` 上述代码中,我们首先加载了一个深度学习模型,然后使用 PyTorch 的 transforms 对图片进行预处理,最后将预处理后的图片输入到模型中进行预测。预测的结果是一个深度图,我们将其转换为 numpy 数组并显示出来。 根据单目进行测距的方法: 根据单目进行测距的方法主要有两种:三角化法和尺度恢复法。 三角化法基于两个相机的视差信息计算出物体的深度,需要知道两个相机的内参和外参。因为需要两个相机,所以这种方法比较复杂。 尺度恢复法则是根据物体的大小和相机的视角计算出物体的深度。这种方法只需要一个相机,但需要知道物体的大小。可以使用物体的实际大小或者通过其他途径获得物体大小的估计值。 以下是一个使用尺度恢复法进行测距的例子: ```python # 获得深度图中的某个像素的深度值 depth = depth_map[100, 100] # 计算物体的实际大小 object_size = 0.2 # 假设物体的实际大小为 20 厘米 # 计算相机的视角 fov = 60 # 假设相机的视角为 60 度 img_width, img_height = img.size focal_length = img_width / (2 * np.tan(np.deg2rad(fov) / 2)) # 计算距离 distance = object_size * focal_length / depth print('距离为:', distance, '米') ``` 上述代码中,我们首先获得深度图中某个像素的深度值,然后计算物体的实际大小。接下来,我们计算相机的视角,并根据相机的视角和图像宽度计算出相机的焦距。最后,我们使用尺度恢复法计算出距离。需要注意的是,这种方法只是一个估计值,因为物体的大小可能不是完全准确的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值