用fw做网站页面,指定关键词seo报价,如何形容网站开发公司技术经验,青岛网站建设企业文章目录 前言一、读取深度值与图像1、深度值读取2、图像读取 二、深度图可视化1、深度图可视化代码2、深度图可视化结果展示 三、深度图在图像上可视化1、可视化代码2、可视化坐标显示 四、完整代码 前言
kitti数据是一个通用数据#xff0c;有关kitti的深度图像内容我已有博… 文章目录 前言一、读取深度值与图像1、深度值读取2、图像读取 二、深度图可视化1、深度图可视化代码2、深度图可视化结果展示 三、深度图在图像上可视化1、可视化代码2、可视化坐标显示 四、完整代码 前言
kitti数据是一个通用数据有关kitti的深度图像内容我已有博客介绍。这里我将给出一个工具用于显示深度值对应像素坐标再图像上也给出深度值可视化显示内容。
一、读取深度值与图像
很简单直接使用cv与PIL库可实现数据读取其调用代码如下 path ./data/2011_09_26_drive_0001_syncindex 0000000005image_2_path os.path.join(path, 2011_09_26_drive_0001_sync/2011_09_26/2011_09_26_drive_0001_sync/image_02/data, index .png) # 获得图像depth_path os.path.join(path,2011_09_26_drive_0001_sync/proj_depth/groundtruth/image_02,index.png)groundtruth depth_read(depth_path)img get_image(image_2_path) # 读取图像1、深度值读取
使用官网提供方法该方法得到是真实相机坐标系下z轴距离我会在后面图显示其代码如下
def depth_read(filename):# loads depth map D from png file# and returns it as a numpy array,# for details see readme.txtdepth_png np.array(Image.open(filename), dtypeint)# make sure we have a proper 16bit depth map here.. not 8bit!assert(np.max(depth_png) 255)depth depth_png.astype(np.float) / 256.# depth[depth_png 0] -1.return depth2、图像读取
图像是对应的深度图的图像以相机02为准其代码如下
def get_image(img_path):img cv2.imread(img_path)return img二、深度图可视化
显然我们只需使用深度图信息即可实现。
1、深度图可视化代码
直接使用plt可实现其代码如下
def show_depth(groundtruth):# import numpy as np# import matplotlib.pyplot as plt# 假设我们有深度数据存储在一个名为depth_data的NumPy数组中。# 这个数组应该具有与你的图像相同的形状。# 转换深度数据到0-1范围内的浮点数normalized_depth groundtruth.astype(np.float32) / groundtruth.max()# 创建一个颜色映射从蓝色最小值到黄色最大值cmap plt.get_cmap(viridis)# 使用颜色映射创建一个新的图像color_image cmap(normalized_depth)# 删除alpha通道如果有的话if color_image.shape[-1] 4:color_image color_image[..., :3]# 显示新的彩色图像plt.imshow(color_image)plt.colorbar()plt.show()
2、深度图可视化结果展示 三、深度图在图像上可视化
1、可视化代码
明显我目的是要将对应深度图值显示在对应图像上其代码如下
def show_depth2img(img,groundtruth,interval_x100, interval_y20):将深度图对应深度图值按照约定行与列像素打印到图像上方法:interval_x100:x坐标按照多少像素取值决定x方向间隔:interval_y20y坐标按照多少像素取值决定y方向间隔:param img: 原始图像内容:param groundtruth: 深度图值:return: 返回一个显示深度图值在图像上h, w img.shape[:2]# interval_x, interval_y 100, 20 # w与h相隔多少像素显示内容numpy_y, numpy_x int(h / interval_y), int(w / interval_x)for i in range(numpy_x):for j in range(numpy_y):x int(interval_x * i)y int(interval_y * j)value groundtruth[y, x]img draw_circle_coord(img, coord(x, y), valuevalue)2、可视化坐标显示 你会发现有很多值是0这是正常的。你也发现数值确实也是kitti官网说的是真实距离坐标确实是这样的如图显示。
四、完整代码
最后我给出一个完整代码可以直接执行其代码如下
import os
import cv2
import numpy as np
import matplotlib.pyplot as plt
def get_image(img_path):img cv2.imread(img_path)return img
def show_img(img):plt.imshow(img)plt.show()from PIL import Imagedef depth_read(filename):# loads depth map D from png file# and returns it as a numpy array,# for details see readme.txtdepth_png np.array(Image.open(filename), dtypeint)# make sure we have a proper 16bit depth map here.. not 8bit!assert(np.max(depth_png) 255)depth depth_png.astype(np.float) / 256.# depth[depth_png 0] -1.return depthdef show_depth(groundtruth):# import numpy as np# import matplotlib.pyplot as plt# 假设我们有深度数据存储在一个名为depth_data的NumPy数组中。# 这个数组应该具有与你的图像相同的形状。# 转换深度数据到0-1范围内的浮点数normalized_depth groundtruth.astype(np.float32) / groundtruth.max()# 创建一个颜色映射从蓝色最小值到黄色最大值cmap plt.get_cmap(viridis)# 使用颜色映射创建一个新的图像color_image cmap(normalized_depth)# 删除alpha通道如果有的话if color_image.shape[-1] 4:color_image color_image[..., :3]# 显示新的彩色图像plt.imshow(color_image)plt.colorbar()plt.show()def draw_circle_coord(image,coordNone,valueNone):if coord is not None and value is not None:coord tuple(coord)image cv2.circle(image, coord, 5, (255, 0, 0), -1)value round(value,2)image cv2.putText(image, str(value)m, coord, cv2.FONT_HERSHEY_COMPLEX, 0.6, (0, 0, 255), 1, cv2.LINE_AA)return imagedef show_depth2img(img,groundtruth,interval_x100, interval_y20):将深度图对应深度图值按照约定行与列像素打印到图像上方法:interval_x100:x坐标按照多少像素取值决定x方向间隔:interval_y20y坐标按照多少像素取值决定y方向间隔:param img: 原始图像内容:param groundtruth: 深度图值:return: 返回一个显示深度图值在图像上h, w img.shape[:2]# interval_x, interval_y 100, 20 # w与h相隔多少像素显示内容numpy_y, numpy_x int(h / interval_y), int(w / interval_x)for i in range(numpy_x):for j in range(numpy_y):x int(interval_x * i)y int(interval_y * j)value groundtruth[y, x]img draw_circle_coord(img, coord(x, y), valuevalue)if __name__ __main__:path ./data/2011_09_26_drive_0001_syncindex 0000000005image_2_path os.path.join(path, 2011_09_26_drive_0001_sync/2011_09_26/2011_09_26_drive_0001_sync/image_02/data, index .png) # 获得图像depth_path os.path.join(path,2011_09_26_drive_0001_sync/proj_depth/groundtruth/image_02,index.png)groundtruth depth_read(depth_path)img get_image(image_2_path) # 读取图像show_depth(groundtruth) # 显示深度图img show_depth2img(img, groundtruth, interval_x100, interval_y20)cv2.imwrite(out_dir/draw_coord.png,img)show_img(img)