通常情况下,RGB图和深度图分开存储,有的时候想放到一张图片里保存所有信息,可以把深度信息放到RGBA的第四个通道(透明度通道),这篇文章介绍实现方法。
注意:本文记录的是一个文件夹下文件的批量处理,如果只想处理一对文件只需使用sum_RGBD()即可
RGB+深度合成四通道RGBD
javascript
from PIL import Image
import os
import numpy as np
import cv2
# function:将RGB图像文件和深度图像文件合并为RGBD文件
def sum_RGBD(rgb_image_path, depth_image_path, dir_path):
# 读取RGB图像和深度图像
rgb_image = Image.open(rgb_image_path) # 更换为你RGB图像的路径
depth_image = Image.open(depth_image_path) # 更换为你深度图像的路径
# 确保深度图像是单通道,如果不是,转换为灰度图像
if depth_image.mode != 'L':
depth_image = depth_image.convert('L')
# 检查两张图像的尺寸是否匹配
if rgb_image.size != depth_image.size:
raise ValueError("The size of the two images does not match.")
# 合并图像
rgbd_image = Image.merge("RGBA", (
rgb_image.getchannel('R'), rgb_image.getchannel('G'), rgb_image.getchannel('B'), depth_image))
# 保存结果
save_path = 设置保存路径
rgbd_image.save(save_path) # 更换为你想保存的路径
批量处理
javascript
# function:从文件夹中获取文件名列表
def get_filename_list(image_folder_path, depth_folder_path):
image_file_names = os.listdir(image_folder_path)
depth_file_names = os.listdir(depth_folder_path)
return image_file_names, depth_file_names
if __name__ == '__main__':
# 改成自己的路径!!!
image_file_names, depth_file_names = get_filename_list(image_folder_path, depth_folder_path)
for i in range(len(image_file_names)):
rgb_image_path = image_folder_path + image_file_names[i]
depth_image_path = depth_folder_path + depth_file_names[i]
dir_path = 设置保存路径
sum_RGBD(rgb_image_path, depth_image_path, dir_path)
验证是否为四通道
javascript
def is_rgbd_image(image):
return len(image.getbands()) > 3