用python可视化.depth文件
用python可视化.depth文件,并且跟随鼠标的箭头显示深度值
点击查看代码
import numpy as np
import cv2
import matplotlib
matplotlib.use('TkAgg') # 必须在导入 pyplot 之前设置
import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
# ===================== 配置参数 =====================
depth_file_path = r"E:\PycharmWorkSpace\slambook2-master\slambook2-master\3rdparty\remode_test_data\test_data\depthmaps\scene_000.depth" # 你的.depth文件路径
width, height = 640, 480 # REMODE数据集尺寸
cmap = 'plasma' # 深度可视化最佳色板(plasma/inferno)
title = "REMODE Depth Map (Interactive)"
# ===================== 读取并处理深度数据 =====================
# 1. 读取.depth文件(厘米转米)
with open(depth_file_path, 'r', encoding='utf-8') as f:
depth_data = np.array(list(map(float, f.read().split()))).reshape(height, width)
depth_m = depth_data / 100.0 # 转换为米
# 过滤无效深度值(可选:小于0.1米或大于10米设为NaN)
depth_m[(depth_m < 0.1) | (depth_m > 10.0)] = np.nan
# ===================== 定义交互式回调函数 =====================
def on_hover(event):
"""鼠标悬停事件:实时显示像素坐标和深度值"""
# 获取当前坐标轴
ax = event.inaxes
if ax is None:
return # 鼠标移出图像区域,不显示
# 获取鼠标位置的像素坐标(x:列/宽度,y:行/高度)
x, y = int(event.xdata + 0.5), int(event.ydata + 0.5)
# 检查坐标是否在图像范围内
if 0 <= x < width and 0 <= y < height:
depth_val = depth_m[y, x]
# 显示格式:(像素坐标) 深度值(保留3位小数)
if np.isnan(depth_val):
text_str = f"Pixel: ({x}, {y}) | Depth: Invalid"
else:
text_str = f"Pixel: ({x}, {y}) | Depth: {depth_val:.3f} m"
# 更新文本框内容
info_text.set_text(text_str)
else:
info_text.set_text("Pixel: (Out of Range) | Depth: --")
# 强制刷新画布
fig.canvas.draw_idle()
# ===================== 创建交互式绘图窗口 =====================
# 创建画布和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
#fig.canvas.set_window_title(title)
# 绘制深度图
im = ax.imshow(depth_m, cmap=cmap)
ax.set_title(title, fontsize=12, pad=10)
ax.axis('off') # 隐藏坐标轴
# 添加颜色条(深度标尺)
cbar = fig.colorbar(im, ax=ax, label='Depth (m)', shrink=0.8)
cbar.ax.tick_params(labelsize=10)
# 添加文本框:显示鼠标位置和深度值(固定在图像下方)
info_text = ax.text(
0.5, -0.1, # 位置(相对坐标轴,0-1)
"Pixel: (--, --) | Depth: --",
ha='center', va='top', transform=ax.transAxes,
fontsize=10, bbox=dict(boxstyle='round', facecolor='white', alpha=0.8)
)
# 绑定鼠标移动事件
fig.canvas.mpl_connect('motion_notify_event', on_hover)
# ===================== 显示窗口 =====================
plt.tight_layout()
plt.show()


浙公网安备 33010602011771号