Opencv保存读取float类型深度图

保存

MyData.h_people_depth = cv::cuda::GpuMat(PROJECTION_HEI, PROJECTION_WID, CV_32FC1, cv::Scalar(0, 0, 0));

cv::Mat people_depth;
MyData.h_people_depth.download(people_depth);


cv::Mat people_depth_save(people_depth.rows, people_depth.cols, CV_8UC4, people_depth.data);
cv::normalize(people_depth, people_depth, 0, 1.0, cv::NORM_MINMAX);

cv::imshow("people_depth", people_depth);
cv::imshow("people_depth_save", people_depth_save);
cv::imwrite("../res/people_depth.png", people_depth_save);

读取

Mat depth = imread("../res/people_depth.png", IMREAD_UNCHANGED);

for(int i=0;i<depth.rows;i++){
        for(int j=0;j<depth.cols;j++){
            if(depth.at<float>(i,j) > 0)
                printf("%f \n",depth.at<float>(i,j));

            Point2d p1 = pixel2cam(Point2d(i,j),K1);
     }
}

 

### 使用 Python 读取深度图像 对于处理和读取深度图像的任务,可以利用 `OpenCV` 或者专门用于三维数据处理的库如 `PIL` 和 `numpy` 来完成。下面介绍一种基于 OpenCV 的方法来加载并显示深度图。 #### 方法一:通过 OpenCV 加载 PNG/JPEG 编码的深度图 如果深度图是以常见的图片格式存储(例如PNG),可以直接使用 OpenCV 函数 `cv2.imread()` 来读入文件: ```python import cv2 import numpy as np depth_image_path = 'path_to_depth_image.png' img = cv2.imread(depth_image_path, cv2.IMREAD_ANYDEPTH) if img is None: print('Failed to load image file:', depth_image_path) else: # 显示原始深度图 cv2.imshow('Depth Image', img.astype(np.float32)) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此代码片段会尝试打开指定路径下的深度图像,并将其作为灰度图像读入内存中[^1]。注意这里使用了参数 `-IMREAD_ANYDEPTH` ,这允许函数正确解析不同位深的数据类型而不仅仅是8-bit整数,默认情况下它能够识别16bit无符号短整形以及32bit浮点型等常见格式。 另外,在某些场景下,特别是当涉及到传感器获取到的是二进制流形式而非标准图像编码时,则可能需要用到特定设备厂商提供的 SDK 或 API 接口来进行解码操作;或者是采用其他第三方工具包比如 Pyrealsense2 (针对 Intel RealSense 设备),该软件开发套件提供了方便易用的功能接口可用于访问摄像头采集得到的各种类型的帧信息,包括彩色视频流、红外线影像还有最重要的深度映射数据。 #### 方法二:使用 Pyrealsense2 库实时捕获深度图像 安装 pyrealsense2 后可以通过如下方式连接硬件设备并抓取当前时刻的一帧深度数据: ```python import pyrealsense2 as rs import numpy as np import cv2 pipeline = rs.pipeline() config = rs.config() # 开启默认配置 profile = pipeline.start(config) try: while True: frames = pipeline.wait_for_frames() # 等待一组新的帧集到达 aligned_depth_frame = frames.get_depth_frame().as_depth_frame() if not aligned_depth_frame: continue depth_intrin = aligned_depth_frame.profile.as_video_stream_profile().intrinsics width, height = depth_intrin.width, depth_intrin.height depth_data = np.asarray(aligned_depth_frame.get_data()) colorizer = rs.colorizer() colored_depth = np.asanyarray(colorizer.colorize(aligned_depth_frame).get_data()) images = np.hstack((colored_depth)) cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE) cv2.imshow('RealSense', images) key = cv2.waitKey(1) finally: pipeline.stop() ``` 这段脚本展示了如何设置 Realsense 摄像头并将获得的深度帧转换成适合可视化的形式输出至窗口内[^2].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值