orbbec 奥比中光相机单目及多目调用方式python代码

这篇文章会介绍使用orbbec相机的一些常用代码梯子

orbbec 奥比中光Astra相机单目及多目调用方式

  Orbbec相机是一个专注于深度感知和计算机视觉应用的设备,通常用于3D扫描、手势识别、增强现实(AR)以及其他需要深度信息的场景。Orbbec相机的SDK(软件开发工具包)提供了丰富的API,支持多种编程语言,如C++、C#和Python,使开发者能够快速实现深度图像采集、物体检测、3D建模等功能。此外,Orbbec相机与国产相机兼容性较好,能够灵活集成到各种应用中,特别适用于需要低成本和高效开发的场合。

  国产相机的优势在于其成本效益和便捷性。它们通常与本地技术和需求更加贴合,能够提供较为简化的开发过程,特别是与Orbbec相机结合时,开发者可以利用Orbbec的SDK进行深度信息获取和处理,同时享受国产相机的高性价比和便利的技术支持。这种组合非常适合需要较高性价比并且对开发周期有较高要求的项目,尤其是在一些工业自动化、机器人控制、智能监控等应用领域。

编译sdk

调用单相机方式目前所知有两种,一种是使用openni2,另一张则是使用官方的sdk。但是官方的sdk可以调用多个相机,openni2还未知是否可以,因此本文也只对其sdk进行使用。
https://github.com/orbbec/pyorbbecsdk.git这是官方代码,按照编译流畅再win上进行编译即可,不同版本的py不可以通用

最后会得到以下文件,放入同一文件家里运行下面的调用单相机即可
在这里插入图片描述

调用单相机

# -*- coding: utf-8 -*-
# @Time    : 2024/11/18 11:27
# @Site    : 
# @File    : get_orbbec_color_depth.py
# @Comment :
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from orbbec.pyorbbecsdk import *
import cv2
import numpy as np
import sys
import argparse
import os
import shutil
from typing import Union, Any, Optional
from orbbec.pyorbbecsdk import FormatConvertFilter, VideoFrame
from orbbec.pyorbbecsdk import OBFormat, OBConvertFormat
ESC_KEY = 27
MIN_DEPTH = 20  # 20mm
MAX_DEPTH = 10000  # 10000mm
def frame_to_bgr_image(frame: VideoFrame) -> Union[Optional[np.array], Any]:
    width = frame.get_width()
    height = frame.get_height()
    color_format = frame.get_format()
    data = np.asanyarray(frame.get_data())
    image = np.zeros((height, width, 3), dtype=np.uint8)
    if color_format == OBFormat.RGB:
        image = np.resize(data, (height, width, 3))
        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    elif color_format == OBFormat.BGR:
        image = np.resize(data, (height, width, 3))
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    elif color_format == OBFormat.YUYV:
        image = np.resize(data, (height, width, 2))
        image = cv2.cvtColor(image, cv2.COLOR_YUV2BGR_YUYV)
    elif color_format == OBFormat.MJPG:
        image = cv2.imdecode(data, cv2.IMREAD_COLOR)
    elif color_format == OBFormat.I420:
        image = i420_to_bgr(data, width, height)
        return image
    elif color_format == OBFormat.NV12:
        image = nv12_to_bgr(data, width, height)
        return image
    elif color_format == OBFormat.NV21:
        image = nv21_to_bgr(data, width, height)
        return image
    elif color_format == OBFormat.UYVY:
        image = np.resize(data, (height, width, 2))
        image = cv2.cvtColor(image, cv2.COLOR_YUV2BGR_UYVY)
    else:
        print("Unsupported color format: {}".format(color_format))
        return None
    return image


pipeline = Pipeline()
device = pipeline.get_device()
device_info = device.get_device_info()
device_pid = device_info.get_pid()
config = Config()
### 如何在ROS中调用奥比相机的深度图 要在ROS环境中成功调用奥比Orbbec相机的深度图,可以按照以下方式操作。通常情况下,Orbbec官方提供了支持ROS的SDK工具包,这使得开发者能够轻松集成其设备到ROS框架中。 #### 1. 安装依赖项 为了能够在ROS环境下使用Orbbec相机,首先需要安装必要的软件包和驱动程序。可以通过以下命令来完成: ```bash sudo apt-get update sudo apt-get install ros-$ROS_DISTRO-openni-camera ros-$ROS_DISTRO-openni-launch ``` 这里`$ROS_DISTRO`代表当前使用的ROS版本名称,例如`noetic`或者`melodic`[^1]。 #### 2. 配置Orbbec SDK 下载并解压适用于Linux系统的Orbbec OpenNI2 SDK以及对应的固件文件。这些资源可以从官网获取[^3]。接着设置环境变量以便于系统识别新加入的库路径: ```bash export OPENNI2_REDIST=$HOME/orbbec/OpenNI-Linux-x64-2.3/Redist export OPENNI2_INCLUDE=$HOME/orbbec/OpenNI-Linux-x64-2.3/Include ``` 确保以上路径指向实际存放OpenNI2 SDK的位置。 #### 3. 启动节点发布话题 启动预设好的launch脚本以激活传感器并与之通信: ```xml <launch> <node pkg="openni_launch" type="openni.launch" name="orbbec_camera"/> </launch> ``` 保存此XML内容至`.launch`扩展名文件里,比如命名为`orbbec_depth.launch`。之后执行如下指令运行它: ```bash roslaunch your_package_name orbbec_depth.launch ``` 此时应该能看到一系列由该设备产生的主题列表,其中包括深度图像数据流 `/camera/depth/image_raw`. #### Python代码实例读取深度信息 下面给出一段简单的Python代码片段用于订阅上述提到的主题从而获得原始形式的深度帧数据: ```python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError def depth_callback(data): bridge = CvBridge() try: # Convert the ROS image message to a CV2 image depth_image = bridge.imgmsg_to_cv2(data, desired_encoding='passthrough') # Process the depth_image as needed... print(depth_image.shape) except CvBridgeError as e: print(e) if __name__ == '__main__': rospy.init_node('depth_subscriber', anonymous=True) sub = rospy.Subscriber('/camera/depth/image_raw', Image, depth_callback) rospy.spin() ``` 这段脚本初始化了一个名为 `depth_subscriber` 的节点,并定义回调函数处理接收到的消息对象转换成易于管理的形式供后续分析利用[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一休哥※

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值