使用 OpenCV 将感兴趣区域从 RGB 视频转换为深度视频
Translate Region of Interest from RGB video to Depth video using OpenCV
我最近购买了 L515 RealSense 相机,它有一个 RGB 传感器和一个 深度(激光雷达) 传感器。我还有一个 预训练模型 只检测 RGB 图像中的手,但我想将这个感兴趣区域转换为深度图像。不幸的是,由于两个传感器之间存在偏移,图像输入没有完全对齐,这使得翻译变得困难。
我编写了一个简单的 GUI 脚本,允许我在每个图像输入中选择 3 个点(白色)并计算一个仿射变换矩阵,然后可以应用该矩阵来排列图像。
然而,结果一直没有成功。
我的猜测是这与两个相机之间的焦距不同有关。我想知道我是否可以在 OpenCV 中做些什么来更好地对齐图像。
到目前为止,最简单的方法是使用 librealsense API 中的 'align' 进程,示例如下:https://github.com/IntelRealSense/librealsense/blob/master/wrappers/python/examples/align-depth2color.py
重要部分:
align = rs.align(rs.stream.color)
# Streaming loop
try:
while True:
# Get frameset of color and depth
frames = pipeline.wait_for_frames()
# frames.get_depth_frame() is a 640x360 depth image
# Align the depth frame to color frame
aligned_frames = align.process(frames)
# Get aligned frames
aligned_depth_frame = aligned_frames.get_depth_frame()
color_frame = aligned_frames.get_color_frame()
执行此操作后,彩色图像和深度图像将在空间上对齐且分辨率相同,因此彩色图像中的 (i,j) 像素坐标将直接映射到深度图像中的 (i,j),尽管并非所有颜色点都具有有效的深度数据。
我最近购买了 L515 RealSense 相机,它有一个 RGB 传感器和一个 深度(激光雷达) 传感器。我还有一个 预训练模型 只检测 RGB 图像中的手,但我想将这个感兴趣区域转换为深度图像。不幸的是,由于两个传感器之间存在偏移,图像输入没有完全对齐,这使得翻译变得困难。
我编写了一个简单的 GUI 脚本,允许我在每个图像输入中选择 3 个点(白色)并计算一个仿射变换矩阵,然后可以应用该矩阵来排列图像。
然而,结果一直没有成功。
我的猜测是这与两个相机之间的焦距不同有关。我想知道我是否可以在 OpenCV 中做些什么来更好地对齐图像。
到目前为止,最简单的方法是使用 librealsense API 中的 'align' 进程,示例如下:https://github.com/IntelRealSense/librealsense/blob/master/wrappers/python/examples/align-depth2color.py 重要部分:
align = rs.align(rs.stream.color)
# Streaming loop
try:
while True:
# Get frameset of color and depth
frames = pipeline.wait_for_frames()
# frames.get_depth_frame() is a 640x360 depth image
# Align the depth frame to color frame
aligned_frames = align.process(frames)
# Get aligned frames
aligned_depth_frame = aligned_frames.get_depth_frame()
color_frame = aligned_frames.get_color_frame()
执行此操作后,彩色图像和深度图像将在空间上对齐且分辨率相同,因此彩色图像中的 (i,j) 像素坐标将直接映射到深度图像中的 (i,j),尽管并非所有颜色点都具有有效的深度数据。