OrbbecSDK2 2.0.2
OrbbecSDK2: New generation Software-Development-Kit for Orbbec 3D-Sensor devices
载入中...
搜索中...
未找到
OB2Camera.hpp
浏览该文件的文档.
1#pragma once
2
3#include "OB2Types.hpp"
4
5extern "C" {
6#include "h/ob2camera.h"
7}
8
9#include <functional>
10#include <memory>
11#include <string>
12
13namespace ob2 {
14
15// 前置声明
16class device;
17class capture;
18class image;
19
33public:
49 cameras_config(ob2_cameras_config_t &&cameras_config_handle) : m_cameras_config_handle(cameras_config_handle) {
51 }
52
74 config.m_cameras_config_handle = nullptr;
75 }
76
88 virtual ~cameras_config() noexcept {
89 ob2_status_t status;
90 if(m_cameras_config_handle != nullptr) {
92 }
93 }
94
118 virtual void set_camera_stream_profile(ob2_camera_type_t camera_type, const ob2_camera_stream_profile_t &stream_profile) {
119 ob2_status_t status;
120 ob2_cameras_config_set_camera_stream_profile(m_cameras_config_handle, camera_type, &stream_profile, &status);
122 }
123
145 virtual void enable_camera_stream(ob2_camera_type_t camera_type) {
146 ob2_status_t status;
149 }
150
184 virtual void enable_camera_stream(ob2_camera_type_t camera_type, uint32_t width_pixels, uint32_t height_pixels, uint32_t frame_rate,
185 ob2_image_format_t format) {
186 ob2_status_t status;
187 ob2_cameras_config_set_and_enable_camera_stream(m_cameras_config_handle, camera_type, width_pixels, height_pixels, frame_rate, format, &status);
189 }
190
211 ob2_status_t status;
214 }
215
241 virtual void set_images_sync_mode(ob2_images_sync_mode_t images_sync_mode) {
242 ob2_status_t status;
245 }
246
275 ob2_status_t status;
278 }
279
300 virtual void set_images_align_mode(ob2_images_align_mode_t images_align_mode) {
301 ob2_status_t status;
304 }
305
326 virtual void set_cameras_sync_mode(ob2_cameras_sync_mode_t cameras_sync_mode) {
327 ob2_status_t status;
330 }
331
357 virtual void set_cameras_sync_delay_usec(uint32_t delay_usec) {
358 ob2_status_t status;
361 }
362
381 virtual void set_wired_sync_mode(ob2_wired_sync_mode_t wired_sync_mode) {
382 ob2_status_t status;
385 }
386
412 virtual void set_secondary_delay_off_primary_usec(uint32_t delay_usec) {
413 ob2_status_t status;
416 }
417
440 }
441
442protected:
444};
445
457class image {
458public:
484 image(ob2_camera_type_t source_camera_type, ob2_image_format_t image_format, uint32_t width_pixels, uint32_t height_pixels, uint32_t stride_bytes) {
485 ob2_status_t status;
486 m_image_handle = ob2_image_create(source_camera_type, image_format, width_pixels, height_pixels, stride_bytes, &status);
488 }
489
526 image(ob2_camera_type_t source_camera_type, ob2_image_format_t image_format, uint32_t width_pixels, uint32_t height_pixels, uint32_t stride_bytes,
527 uint8_t *buffer, uint32_t buffer_size, buffer_release_cb cb) {
528 ob2_status_t status;
530 m_image_handle = ob2_image_create_from_buffer(source_camera_type, image_format, width_pixels, height_pixels, //
531 stride_bytes, buffer, buffer_size, &image::buffer_release_callback, this, &status);
533 }
534
550 image(ob2_image_t &&image_handle) : m_image_handle(image_handle) {
551 VALIDATE_NOT_NULL(image_handle);
552 }
553
575 img.m_image_handle = nullptr;
576 }
577
589 virtual ~image() noexcept {
590 ob2_status_t status;
591 if(m_image_handle != nullptr) {
593 }
594 }
595
617 virtual uint8_t *get_buffer() {
618 ob2_status_t status;
619 auto buffer = ob2_image_get_buffer(m_image_handle, &status);
621 return buffer;
622 }
623
643 virtual uint32_t get_size() {
644 ob2_status_t status;
645 auto size = ob2_image_get_size(m_image_handle, &status);
647 return size;
648 }
649
667 ob2_status_t status;
668 auto format = ob2_image_get_format(m_image_handle, &status);
670 return format;
671 }
672
688 virtual uint32_t get_width_pixels() {
689 ob2_status_t status;
690 auto width = ob2_image_get_width_pixels(m_image_handle, &status);
692 return width;
693 }
694
710 virtual uint32_t get_height_pixels() {
711 ob2_status_t status;
712 auto height = ob2_image_get_height_pixels(m_image_handle, &status);
714 return height;
715 }
716
742 virtual uint32_t get_stride_bytes() {
743 ob2_status_t status;
744 auto stride = ob2_image_get_stride_bytes(m_image_handle, &status);
746 return stride;
747 }
748
778 virtual uint64_t get_device_timestamp_usec() {
779 ob2_status_t status;
780 auto timestamp = ob2_image_get_device_timestamp_usec(m_image_handle, &status);
782 return timestamp;
783 }
784
803 virtual uint64_t get_system_timestamp_usec() {
804 ob2_status_t status;
805 auto timestamp = ob2_image_get_system_timestamp_usec(m_image_handle, &status);
807 return timestamp;
808 }
809
828 ob2_status_t status;
829 auto camera_type = ob2_image_get_source_camera_type(m_image_handle, &status);
831 return camera_type;
832 }
833
855 ob2_status_t status;
858 return bits;
859 }
860
887 virtual float get_value_scale() {
888 ob2_status_t status;
889 auto scale = ob2_depth_image_get_value_scale(m_image_handle, &status);
891 return scale;
892 }
893
915 return m_image_handle;
916 }
917
918protected:
919 static void buffer_release_callback(uint8_t *buffer, void *user_data) {
920 auto im = (image *)user_data;
921 im->m_buffer_release_cb(buffer);
922 }
923
924protected:
927};
928
940class capture {
941public:
954 ob2_status_t status;
957 }
958
974 capture(ob2_capture_t &&capture_handle) : m_capture_handle(capture_handle) {
975 VALIDATE_NOT_NULL(capture_handle);
976 }
977
999 cap.m_capture_handle = nullptr;
1000 }
1001
1013 virtual ~capture() noexcept {
1014 ob2_status_t status;
1015 if(nullptr != m_capture_handle) {
1017 }
1018 }
1019
1047 virtual std::shared_ptr<image> get_image(ob2_camera_type_t camera_type) {
1048 ob2_status_t status;
1049 auto image_handle = ob2_capture_get_image(m_capture_handle, camera_type, &status);
1051 if(nullptr != image_handle) {
1052 return std::make_shared<image>(std::move(image_handle));
1053 }
1054 return nullptr;
1055 }
1056
1079 virtual std::shared_ptr<image> get_color_image() {
1080 ob2_status_t status;
1081 auto image_handle = ob2_capture_get_color_image(m_capture_handle, &status);
1083 if(nullptr != image_handle) {
1084 return std::make_shared<image>(std::move(image_handle));
1085 }
1086 return nullptr;
1087 }
1088
1111 virtual std::shared_ptr<image> get_depth_image() {
1112 ob2_status_t status;
1113 auto image_handle = ob2_capture_get_depth_image(m_capture_handle, &status);
1115 if(nullptr != image_handle) {
1116 return std::make_shared<image>(std::move(image_handle));
1117 }
1118 return nullptr;
1119 }
1120
1143 virtual std::shared_ptr<image> get_ir_image() {
1144 ob2_status_t status;
1145 auto image_handle = ob2_capture_get_ir_image(m_capture_handle, &status);
1147 if(nullptr != image_handle) {
1148 return std::make_shared<image>(std::move(image_handle));
1149 }
1150 return nullptr;
1151 }
1152
1173 virtual void set_image(ob2_camera_type_t camera_type, std::shared_ptr<image> im) {
1174 ob2_status_t status;
1175 ob2_capture_set_image(m_capture_handle, camera_type, im->get_handle(), &status);
1177 }
1178
1197 virtual void set_color_image(std::shared_ptr<image> im) {
1198 ob2_status_t status;
1199 ob2_capture_set_color_image(m_capture_handle, im->get_handle(), &status);
1201 }
1202
1221 virtual void set_depth_image(std::shared_ptr<image> im) {
1222 ob2_status_t status;
1223 ob2_capture_set_depth_image(m_capture_handle, im->get_handle(), &status);
1225 }
1226
1245 virtual void set_ir_image(std::shared_ptr<image> im) {
1246 ob2_status_t status;
1247 ob2_capture_set_ir_image(m_capture_handle, im->get_handle(), &status);
1249 }
1250
1272 return m_capture_handle;
1273 }
1274
1275protected:
1277};
1278
1289typedef std::function<void(std::shared_ptr<capture>)> capture_cb;
1290} // namespace ob2
#define CHECK_OB2_STATUS_ERROR_THROW(status)
用于将 C API 中的 ob2_status_t 转换成异常抛出
Definition: OB2Types.hpp:22
#define VALIDATE_NOT_NULL(ARG)
用户参数非空校验
Definition: OB2Types.hpp:45
相机配置,用于设备内相机的工作配置及设备内与相机工作相关模块、SDK 内与相机工作相关相关模块的工作配置。
Definition: OB2Camera.hpp:32
virtual void set_cameras_sync_delay_usec(uint32_t delay_usec)
(单机内)多相机同步延时配置
Definition: OB2Camera.hpp:357
virtual void set_cameras_sync_mode(ob2_cameras_sync_mode_t cameras_sync_mode)
(单机内)多相机同步(同步曝光)模式配置
Definition: OB2Camera.hpp:326
virtual void set_images_align_mode(ob2_images_align_mode_t images_align_mode)
图像对齐模式配置
Definition: OB2Camera.hpp:300
virtual void set_produce_capture_policy(ob2_produce_capture_policy_t policy)
capture 生成策略配置
Definition: OB2Camera.hpp:274
virtual void set_wired_sync_mode(ob2_wired_sync_mode_t wired_sync_mode)
外部同步模式配置(通常是通过同步信号线输入 / 输出同步信号完成同步,所以命名为 wired_sync_mode)
Definition: OB2Camera.hpp:381
virtual void set_camera_stream_profile(ob2_camera_type_t camera_type, const ob2_camera_stream_profile_t &stream_profile)
设置相机数据流配置
Definition: OB2Camera.hpp:118
virtual ~cameras_config() noexcept
相机配置析构函数
Definition: OB2Camera.hpp:88
virtual void set_secondary_delay_off_primary_usec(uint32_t delay_usec)
从设备延时配置(配置为 SECONDARY 模式的设备,在接收到触发信号后,延时一段时间后再执行图像采集)
Definition: OB2Camera.hpp:412
virtual void enable_camera_stream(ob2_camera_type_t camera_type)
使能相机
Definition: OB2Camera.hpp:145
virtual ob2_cameras_config_t get_handle()
获取相机配置句柄
Definition: OB2Camera.hpp:438
virtual void set_images_sync_mode(ob2_images_sync_mode_t images_sync_mode)
设备内多相机图像同步模式配置
Definition: OB2Camera.hpp:241
virtual void enable_camera_stream(ob2_camera_type_t camera_type, uint32_t width_pixels, uint32_t height_pixels, uint32_t frame_rate, ob2_image_format_t format)
配置相机数据流并使能相机
Definition: OB2Camera.hpp:184
cameras_config(cameras_config &&config)
通过其他相机配置对象构造(移动构造,主要用于派生类的实现)
Definition: OB2Camera.hpp:72
ob2_cameras_config_t m_cameras_config_handle
Definition: OB2Camera.hpp:443
virtual void set_disable_camera_stream(ob2_camera_type_t camera_type)
关闭(去除使能)相机数据流
Definition: OB2Camera.hpp:210
cameras_config(ob2_cameras_config_t &&cameras_config_handle)
通过传入相机配置句柄构造(主要实现用于 device::create_cameras_config )
Definition: OB2Camera.hpp:49
相机 capture,capture 是图像对象的载体,一个 capture 通常会包含一个或多个不同类型相机的一帧图像
Definition: OB2Camera.hpp:940
virtual void set_color_image(std::shared_ptr< image > im)
设置 Color 相机图像
Definition: OB2Camera.hpp:1197
ob2_capture_t m_capture_handle
Definition: OB2Camera.hpp:1276
capture()
capture 自定义构造函数
Definition: OB2Camera.hpp:953
virtual std::shared_ptr< image > get_color_image()
获取 Color 相机图像
Definition: OB2Camera.hpp:1079
capture(capture &&cap)
通过其他 capture 对象构造(移动构造,主要用于派生类的实现)
Definition: OB2Camera.hpp:997
virtual void set_image(ob2_camera_type_t camera_type, std::shared_ptr< image > im)
设置指定相机图像
Definition: OB2Camera.hpp:1173
virtual ob2_capture_t get_handle()
获取 capture 句柄
Definition: OB2Camera.hpp:1271
virtual std::shared_ptr< image > get_image(ob2_camera_type_t camera_type)
获取指定相机图像
Definition: OB2Camera.hpp:1047
virtual void set_depth_image(std::shared_ptr< image > im)
设置 Depth 相机图像
Definition: OB2Camera.hpp:1221
virtual std::shared_ptr< image > get_ir_image()
获取 红外 相机图像
Definition: OB2Camera.hpp:1143
virtual ~capture() noexcept
capture 析构函数
Definition: OB2Camera.hpp:1013
virtual void set_ir_image(std::shared_ptr< image > im)
设红外相机图像
Definition: OB2Camera.hpp:1245
virtual std::shared_ptr< image > get_depth_image()
获取 Depth 相机图像
Definition: OB2Camera.hpp:1111
capture(ob2_capture_t &&capture_handle)
通过 capture 句柄构造(主要用于 device::get_capture )
Definition: OB2Camera.hpp:974
设备类定义,设备类代表着与物理设备的通信连接,可通过设备类访问和控制物理设备。
Definition: OB2Device.hpp:28
相机图像类,是相机图像数据的载体
Definition: OB2Camera.hpp:457
virtual uint64_t get_device_timestamp_usec()
获取设备时间戳
Definition: OB2Camera.hpp:778
virtual uint8_t * get_buffer()
获取图像 buffer
Definition: OB2Camera.hpp:617
virtual ob2_camera_type_t get_source_camera_type()
获取图像源相机类型
Definition: OB2Camera.hpp:827
virtual ob2_image_t get_handle()
获取图像句柄
Definition: OB2Camera.hpp:914
virtual ~image() noexcept
图像类析构函数
Definition: OB2Camera.hpp:589
image(ob2_camera_type_t source_camera_type, ob2_image_format_t image_format, uint32_t width_pixels, uint32_t height_pixels, uint32_t stride_bytes)
自定义图像构造
Definition: OB2Camera.hpp:484
virtual float get_value_scale()
获取深度图像数值缩放系数
Definition: OB2Camera.hpp:887
ob2_image_t m_image_handle
Definition: OB2Camera.hpp:925
virtual uint32_t get_height_pixels()
获取图像高度
Definition: OB2Camera.hpp:710
virtual uint8_t get_available_bits_for_each_pixel()
获取图像像素有效位数
Definition: OB2Camera.hpp:854
buffer_release_cb m_buffer_release_cb
Definition: OB2Camera.hpp:926
virtual uint64_t get_system_timestamp_usec()
获取系统时间戳
Definition: OB2Camera.hpp:803
virtual uint32_t get_width_pixels()
获取图像宽度
Definition: OB2Camera.hpp:688
virtual uint32_t get_stride_bytes()
获取图像行跨度
Definition: OB2Camera.hpp:742
image(ob2_camera_type_t source_camera_type, ob2_image_format_t image_format, uint32_t width_pixels, uint32_t height_pixels, uint32_t stride_bytes, uint8_t *buffer, uint32_t buffer_size, buffer_release_cb cb)
从指定 buffer 构造
Definition: OB2Camera.hpp:526
virtual ob2_image_format_t get_format()
获取图像格式
Definition: OB2Camera.hpp:666
static void buffer_release_callback(uint8_t *buffer, void *user_data)
Definition: OB2Camera.hpp:919
image(ob2_image_t &&image_handle)
通过图像句柄构造(主要用于 capture::get_image )
Definition: OB2Camera.hpp:550
image(image &&img)
通过其他图像对象构造(移动构造,主要用于派生类的实现)
Definition: OB2Camera.hpp:573
virtual uint32_t get_size()
获取图像数据大小
Definition: OB2Camera.hpp:643
std::function< void(std::shared_ptr< capture >)> capture_cb
capture 回调函数
Definition: OB2Camera.hpp:1289
std::function< void(uint8_t *buffer)> buffer_release_cb
buffer 释放回调
Definition: OB2Types.hpp:100
void ob2_cameras_config_set_images_sync_mode(ob2_cameras_config_t cameras_config_handle, ob2_images_sync_mode_t images_sync_mode, ob2_status_t *status)
设备内多相机图像同步模式配置
ob2_image_t ob2_capture_get_image(ob2_capture_t capture_handle, ob2_camera_type_t camera_type, ob2_status_t *status)
获取指定相机的图像
ob2_image_t ob2_capture_get_depth_image(ob2_capture_t capture_handle, ob2_status_t *status)
获取 Depth 相机图像
void ob2_cameras_config_set_cameras_sync_mode(ob2_cameras_config_t cameras_config_handle, ob2_cameras_sync_mode_t sync_mode, ob2_status_t *status)
(单机内)多相机同步(同步曝光)模式配置
ob2_image_t ob2_image_create_from_buffer(ob2_camera_type_t source_camera_type, ob2_image_format_t format, uint32_t width_pixels, uint32_t height_pixels, uint32_t stride_bytes, uint8_t *buffer, uint32_t buffer_size, ob2_buffer_release_cb_t buffer_release_cb, void *user_data, ob2_status_t *status)
从指定 buffer 创建图像
void ob2_cameras_config_enable_camera_stream(ob2_cameras_config_t cameras_config_handle, ob2_camera_type_t camera_type, ob2_status_t *status)
使能相机
uint32_t ob2_image_get_width_pixels(ob2_image_t image_handle, ob2_status_t *status)
获取图像宽度
void ob2_capture_set_color_image(ob2_capture_t capture_handle, ob2_image_t image_handle, ob2_status_t *status)
设置 Color 相机的图像
void ob2_cameras_config_set_cameras_sync_delay_usec(ob2_cameras_config_t cameras_config_handle, uint32_t cameras_sync_delay_usec, ob2_status_t *status)
(单机内)多相机同步延时配置,用于控制从相机在主相机图像采集后延时多长时间开始图像采集
void ob2_cameras_config_set_images_align_mode(ob2_cameras_config_t cameras_config_handle, ob2_images_align_mode_t mode, ob2_status_t *status)
图像对齐模式配置
ob2_camera_type_t ob2_image_get_source_camera_type(ob2_image_t image_handle, ob2_status_t *status)
获取图像源相机类型
void ob2_capture_set_image(ob2_capture_t capture_handle, ob2_camera_type_t camera_type, ob2_image_t image_handle, ob2_status_t *status)
设置指定相机的图像
uint8_t * ob2_image_get_buffer(ob2_image_t image_handle, ob2_status_t *status)
获取图像 buffer
void ob2_capture_set_ir_image(ob2_capture_t capture_handle, ob2_image_t image_handle, ob2_status_t *status)
设置红外相机的图像
void ob2_cameras_config_set_produce_capture_policy(ob2_cameras_config_t cameras_config_handle, ob2_produce_capture_policy_t policy, ob2_status_t *status)
capture 生成策略配置
uint64_t ob2_image_get_system_timestamp_usec(ob2_image_t image_handle, ob2_status_t *status)
获取系统时间戳
uint32_t ob2_image_get_height_pixels(ob2_image_t image_handle, ob2_status_t *status)
获取图像高度
ob2_image_t ob2_capture_get_color_image(ob2_capture_t capture_handle, ob2_status_t *status)
获取 Color 相机图像
uint32_t ob2_image_get_size(ob2_image_t image_handle, ob2_status_t *status)
获取图像数据大小
void ob2_cameras_config_set_secondary_delay_off_primary_usec(ob2_cameras_config_t cameras_config_handle, uint32_t secondary_delay_usec, ob2_status_t *status)
从设备延时配置
void ob2_cameras_config_release(ob2_cameras_config_t cameras_config_handle, ob2_status_t *status)
释放相机配置句柄
void ob2_cameras_config_set_wired_sync_mode(ob2_cameras_config_t cameras_config_handle, ob2_wired_sync_mode_t wired_sync_mode, ob2_status_t *status)
外部同步模式配置(通常是通过同步信号线输入 / 输出同步信号完成同步,所以命名为 wired_sync_mode)
void ob2_image_release(ob2_image_t image_handle, ob2_status_t *status)
释放图像
uint32_t ob2_image_get_stride_bytes(ob2_image_t image_handle, ob2_status_t *status)
获取图像行跨度
uint8_t ob2_image_get_available_bits_for_each_pixel(ob2_image_t image_handle, ob2_status_t *status)
获取图像像素有效位数
ob2_capture_t ob2_capture_create(ob2_status_t *status)
创建 capture
void ob2_capture_set_depth_image(ob2_capture_t capture_handle, ob2_image_t image_handle, ob2_status_t *status)
设置 Depth 相机的图像
void ob2_cameras_config_disable_camera_stream(ob2_cameras_config_t cameras_config_handle, ob2_camera_type_t camera_type, ob2_status_t *status)
关闭(去除使能)相机数据流
ob2_image_t ob2_capture_get_ir_image(ob2_capture_t capture_handle, ob2_status_t *status)
获取红外相机图像
ob2_image_t ob2_image_create(ob2_camera_type_t source_camera_type, ob2_image_format_t format, uint32_t width_pixels, uint32_t height_pixels, uint32_t stride_bytes, ob2_status_t *status)
创建图像
void ob2_capture_release(ob2_capture_t capture_handle, ob2_status_t *status)
释放 capture
ob2_image_format_t ob2_image_get_format(ob2_image_t image_handle, ob2_status_t *status)
获取图像格式
void ob2_cameras_config_set_and_enable_camera_stream(ob2_cameras_config_t cameras_config_handle, ob2_camera_type_t camera_type, uint32_t width_pixels, uint32_t height_pixels, uint32_t frame_rate, ob2_image_format_t format, ob2_status_t *status)
配置相机数据流并使能相机
void ob2_cameras_config_set_camera_stream_profile(ob2_cameras_config_t cameras_config_handle, ob2_camera_type_t camera_type, const ob2_camera_stream_profile_t *stream_profile, ob2_status_t *status)
设置相机数据流配置
float ob2_depth_image_get_value_scale(ob2_image_t image_handle, ob2_status_t *status)
获取深度图像数值缩放系数
uint64_t ob2_image_get_device_timestamp_usec(ob2_image_t image_handle, ob2_status_t *status)
获取设备时间戳
ob2_produce_capture_policy_t
Definition: ob2types.h:679
ob2_images_align_mode_t
图像对齐模式
Definition: ob2types.h:722
ob2_camera_type_t
相机类型
Definition: ob2types.h:472
struct OB2ImageImpl * ob2_image_t
图像句柄定义
Definition: ob2types.h:67
struct OB2CaptureImpl * ob2_capture_t
capture 句柄定义
Definition: ob2types.h:55
ob2_images_sync_mode_t
图像同步模式,用于控制生成 capture 时如何同步不同相机的图像
Definition: ob2types.h:653
ob2_image_format_t
图像数据格式
Definition: ob2types.h:486
struct OB2CamerasConfigImpl * ob2_cameras_config_t
相机配置句柄定义
Definition: ob2types.h:43
ob2_cameras_sync_mode_t
相机同步模式
Definition: ob2types.h:1462
ob2_wired_sync_mode_t
多机线连接同步模式
Definition: ob2types.h:1478
用户函数调用返回的状态结构体
Definition: ob2types.h:312