奥比中光astra深度相机通过openni直接显示rgb彩色图、depth深度图、ir红外图

news/2024/10/17 10:43:14/

本文章的前提为astra深度相机驱动安装完成能够正常显示使用,如果没有安装好请看另一篇文章

Thinker Board 2开发板上使用奥比中光 astra 深度相机
也可以看其他人的类似奥比中光astra深度相机的教程

创建python文件复制下面代码既可使用
注意 depth图和ir图有冲突不能同时使用

from openni import openni2
import numpy as np
import cv2if __name__ == "__main__":openni2.initialize()#设备型号dev = openni2.Device.open_any()#打印设备型号print(dev.get_device_info())#创建深度流的通道depth_stream = dev.create_depth_stream()depth_stream.start()#彩色通道color_stream = dev.create_color_stream()color_stream.start()#红外通道#ir_stream = dev.create_ir_stream()#ir_stream.start()#深度窗口cv2.namedWindow('depth')#彩色窗口cv2.namedWindow('color')#红外窗口#cv2.namedWindow('ir')capture_flag = 0base_path = '../'count = 1#设置视频的分辨率和长宽以及fps等等内容# ir_stream.set_video_mode(c_api.OniVideoMode(pixelFormat = c_api.OniPixelFormat.ONI_PIXEL_FORMAT_GRAY16, resolutionX = 320, resolutionY = 240, fps = 30))while True:# 显示深度图像dframe = depth_stream.read_frame()# 转换数据格式dframe_data = np.array(dframe.get_buffer_as_triplet()).reshape([480, 640, 2])dpt1 = np.asarray(dframe_data[:, :, 0], dtype='float32')dpt2 = np.asarray(dframe_data[:, :, 1], dtype='float32')dpt2 *= 255# 对于为什么要乘于255的解答# 深度图像的深度值 是按照16位长度(两字节)的数据格式存储的,也可以认为前八位是高字节,后八位是低字节。# 因此一张深度图像如果是 640480分辨率的话,那么图像字节大小 就是 640480*2,其中一个字节是8位(255)dpt = dpt1 + dpt2# 转换一下,重要,陈20221222dpt = dpt.astype(np.uint16)# cv2里面的函数,就是类似于一种筛选'假设我们需要让我们的深度摄像头感兴趣的距离范围有差别地显示,那么我们就需要确定一个合适的alpha值,公式为:有效距离*alpha=255,' \'假设我们想让深度摄像头8m距离内的深度被显示,>8m的与8m的颜色显示相同,那么alpha=255/(8*10^3)≈0.03,' \'假设我们想让深度摄像头6m距离内的深度被显示,>6m的与6m的颜色显示相同,那么alpha=255/(6*10^3)≈0.0425'dim_gray = cv2.convertScaleAbs(dpt, alpha=0.17)# 对深度图像进行一种图像的渲染,目前有11种渲染方式,大家可以逐一去试下depth_colormap = cv2.applyColorMap(dim_gray, 2)  # 有0~11种渲染的模式cv2.imshow('depth', depth_colormap)# 显示RGB图像cframe = color_stream.read_frame()cframe_data = np.array(cframe.get_buffer_as_triplet()).reshape([480, 640, 3])R = cframe_data[:, :, 0]G = cframe_data[:, :, 1]B = cframe_data[:, :, 2]cframe_data = np.transpose(np.array([B, G, R]), [1, 2, 0])# print(cframe_data.shape)cv2.imshow('color', cframe_data)# 显示ir图像#     iframe = ir_stream.read_frame()#     iframe_data = iframe.get_buffer_as_uint16()#     img = np.frombuffer(iframe_data, dtype=np.uint16)#     img.shape = (480, 640)#     img = img.astype(np.float) / 1024#     cv2.imshow("ir", img)key = cv2.waitKey(30)if int(key) == ord('q'):breakif int(key) == ord('r'):capture_flag = 1if capture_flag == 1:name = str(count).zfill(8)cv2.imwrite(base_path + 'img/' + name + ".jpg", depth_colormap)#cv2.imwrite(base_path + 'img/' + name + ".jpg", cframe_data)# cv2.imwrite(base_path + 'img/' + name + ".jpg", img)count = count + 1depth_stream.stop()color_stream.stop()#ir_stream.stop()dev.close()

这里就不展示ir图了
在这里插入图片描述


http://www.ppmy.cn/news/784124.html

相关文章

视觉之相机选型及打光【RGB】

一、基础知识 视觉开发软件平台:VisionPro、Halcon、LabVIEW-VBAI 相机:工业相机,主要用于图像采集与成像,将现场影像转化为数字信号或者模拟信号的工具。 3MP分辨率指的是:3MP 16:9,意思是用300万像素按16:9的宽高…

微软3月补丁星期二值得关注的漏洞

聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 微软3月补丁星期二共修复了83个漏洞,其中2个是0day,9个被评级为“严重”。 这些漏洞包括: 21个提权漏洞2个安全特性绕过漏洞27个远程代码执行漏洞15个信…

autojs红眼特效

牙叔教程 简单易学 效果展示 autojs版本 8.8.2-0 代码简介 识别眼睛, 使用的是百度的人脸检测在眼睛的位置, 画红眼特效, 使用了阴影, 模糊红眼特效区域使用path.quadTo画了一个菱形曲线 get知识点 百度人脸检测token的获取百度人脸检测输入框监听复选框和draw事件的交互…

祛除红眼算法python实现

最近研究了一下祛除红眼的算法,主要的思想都是将RGB通道里面的R通道给想法设法的降低,其他的通道稍微进行变换就行,这里使用python运行了一下例子看看, version2参考了代码:https://www.cnblogs.com/cpuimage/p/90002…

PicoNEO3离线升级包5.2.3版本

如果你是担心升级到最新版后无法安装学习版资源,请先看该教程 Pico4&Pico3 5.3版本破解游戏版权认证的工具来啦! https://www.bilibili.com/read/cv21711908 5.2.3旧版 MD5:C8012B4F3E8D77AAB4BB52663438855F 使用离线升级包时建议先…

S32DS 3.4 3.5颜色配色方案及代码自动补全提示

S32DS_3.4_3.5_插件 11.92 MB (3 files) org.eclipse.cdt.ui_6.6.100.202009302259.jar_替S32DS_3.4版 5.94 MBorg.eclipse.cdt.ui_7.2.0.202110051412.jar_替S32DS_3.5版 5.98 MBS32DS 3.4_3.5_eclipse_C_Cplusplus_Style颜色主题配置.epf 6.06 KB 使用方法: ①…

dlib实现红眼特效

效果 (图片来源网络,如有侵权请联系删除) 摘要 技术栈如下: 代码演示:python 面部关键点识别:dlib 图像处理:pillow,opencv 人脸关键点 既然是做人眼部位的贴图&#xff0c…

数字图像处理——红眼去除(Python)

输入的图像一般都是RGB三层,但是红眼区域的定义是在HSI空间上进行定义,因此需要存在两个函数将图像数据在RGB空间与HSI空间进行转换,而转换的公式如下图所示: 原始图片数据: 实验代码: import mathi…