相机图像类,是相机图像数据的载体
更多...
#include <OB2Camera.hpp>
|
| 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) |
| 自定义图像构造 更多...
|
|
| 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 构造 更多...
|
|
| image (ob2_image_t &&image_handle) |
| 通过图像句柄构造(主要用于 capture::get_image ) 更多...
|
|
| image (image &&img) |
| 通过其他图像对象构造(移动构造,主要用于派生类的实现) 更多...
|
|
virtual | ~image () noexcept |
| 图像类析构函数 更多...
|
|
virtual uint8_t * | get_buffer () |
| 获取图像 buffer 更多...
|
|
virtual uint32_t | get_size () |
| 获取图像数据大小 更多...
|
|
virtual ob2_image_format_t | get_format () |
| 获取图像格式 更多...
|
|
virtual uint32_t | get_width_pixels () |
| 获取图像宽度 更多...
|
|
virtual uint32_t | get_height_pixels () |
| 获取图像高度 更多...
|
|
virtual uint32_t | get_stride_bytes () |
| 获取图像行跨度 更多...
|
|
virtual uint64_t | get_device_timestamp_usec () |
| 获取设备时间戳 更多...
|
|
virtual uint64_t | get_system_timestamp_usec () |
| 获取系统时间戳 更多...
|
|
virtual ob2_camera_type_t | get_source_camera_type () |
| 获取图像源相机类型 更多...
|
|
virtual uint8_t | get_available_bits_for_each_pixel () |
| 获取图像像素有效位数 更多...
|
|
virtual float | get_value_scale () |
| 获取深度图像数值缩放系数 更多...
|
|
virtual ob2_image_t | get_handle () |
| 获取图像句柄 更多...
|
|
相机图像类,是相机图像数据的载体
在文件 OB2Camera.hpp 第 457 行定义.
◆ image() [1/4]
自定义图像构造
SDK 内部会根据图像格式、宽、高、行跨都等信息在内部申请一块合适大小内存的内存
- 参数
-
[in] | source_camera_type | 图像原相机类型(用于图像信息追踪,可以填 OB2_CAMERA_UNKNOWN ) |
[in] | image_format | 图像格式 |
[in] | width_pixels | 图像宽,单位:像素 |
[in] | height_pixels | 图像高,单位:像素 |
[in] | stride_bytes | 图像行跨度,单位:字节 |
在文件 OB2Camera.hpp 第 484 行定义.
◆ image() [2/4]
从指定 buffer 构造
- 注意
- buffer 内存需要有用户提前申请好,并且需要确保内存的大小与图像格式、宽、高、行跨都等条件匹配。
- 参数
-
[in] | source_camera_type | 图像原相机类型(用于图像信息追踪,可以填 OB2_CAMERA_UNKNOWN ) |
[in] | image_format | 图像格式 |
[in] | width_pixels | 图像宽,单位:像素 |
[in] | height_pixels | 图像高,单位:像素 |
[in] | stride_bytes | 图像行跨度,单位:字节 |
[in] | buffer | buffer 地址指针 |
[in] | buffer_size | buffer 内存大小,单位:字节 |
[in] | cb | buffer 释放回调函数,会在 image 释放时调用,用户需要确保该回调函数能够准确释放内存 |
在文件 OB2Camera.hpp 第 526 行定义.
◆ image() [3/4]
◆ image() [4/4]
ob2::image::image |
( |
image && |
img | ) |
|
|
inline |
通过其他图像对象构造(移动构造,主要用于派生类的实现)
- 注意
- 调用该构造函数后,原图像对象将不再可以访问
- 参数
-
在文件 OB2Camera.hpp 第 573 行定义.
◆ ~image()
virtual ob2::image::~image |
( |
| ) |
|
|
inlinevirtualnoexcept |
◆ get_buffer()
virtual uint8_t * ob2::image::get_buffer |
( |
| ) |
|
|
inlinevirtual |
获取图像 buffer
图像 buffer 内放的即是图像的数据,用户可以通过返回的 buffer 指针直接读取或修改图像数据
- 注意
- 在图像对象被析构后,不要再对 buffer 指向内存进行访问,否则会出现意想不到的问题
- 返回
- uint8_t* buffer 地址指针
在文件 OB2Camera.hpp 第 617 行定义.
◆ get_size()
virtual uint32_t ob2::image::get_size |
( |
| ) |
|
|
inlinevirtual |
获取图像数据大小
通常图像的数据大小会与 buffer 内存大小一致,但是对于压缩或者编码格式图像,图像数据数据大小会小于 buffer 大小。 不过 buffer 大小对用户是没有啥实际意义的,所以可以不用理会
- 返回
- uint8_t* 图像数据大小,单位:字节
在文件 OB2Camera.hpp 第 643 行定义.
◆ get_format()
获取图像格式
图像格式代表着图像像素的排列方式、压缩、编码等特性,用户需要根据图像格式决定如何使用图像数据
- 返回
- ob2_image_format_t 返回图像格式
在文件 OB2Camera.hpp 第 666 行定义.
◆ get_width_pixels()
virtual uint32_t ob2::image::get_width_pixels |
( |
| ) |
|
|
inlinevirtual |
◆ get_height_pixels()
virtual uint32_t ob2::image::get_height_pixels |
( |
| ) |
|
|
inlinevirtual |
◆ get_stride_bytes()
virtual uint32_t ob2::image::get_stride_bytes |
( |
| ) |
|
|
inlinevirtual |
获取图像行跨度
用户可以通过行跨度大小,对 buffer 地址指针进行偏移,从而快速获取图像指定坐标下的像素数据
- 注意
- stride_bytes 与 width_pixels 不一定是倍数关系,因为某些条件下,可能会往图像每一行尾部数据填充一些已实现内存对齐
-
非像素平铺格式(MJPG、H264、H265、RLE、COMPRESSED 等)的图像没有 stride_bytes 概念,调用本接口会抛出 std::runtime_error 异常
- 返回
- uint32_t 返回图像行跨度,单位:字节
在文件 OB2Camera.hpp 第 742 行定义.
◆ get_device_timestamp_usec()
virtual uint64_t ob2::image::get_device_timestamp_usec |
( |
| ) |
|
|
inlinevirtual |
获取设备时间戳
设备实间戳是指图像在设备端打上的时间戳,这个时间戳最接近图像生成时的时间
- 注意
- 默认情况下,这个时间戳是指设备从启动开始过去的时间长度,设备重启后会归零重计。设备定时计数器溢出后会归零重计。
-
由于设备时钟精度关系,虽然设备时间戳单位为微秒,但是某些设备的设备精度其实是毫秒,所以在数值上低三位会为零。
-
并不是所有设备都支持设备时间戳返回,并且由于 Windows 系统限定,需要完成一些特殊系统配置获取到时间戳 (可通过管理员 权限运行 OrbbecViewer 工具自动完成配置)。
- 返回
- uint64_t 返回设备时间戳,单位:微秒
在文件 OB2Camera.hpp 第 778 行定义.
◆ get_system_timestamp_usec()
virtual uint64_t ob2::image::get_system_timestamp_usec |
( |
| ) |
|
|
inlinevirtual |
获取系统时间戳
系统时间戳是指 Host 端 SDK 接收到图像数据时打的时间戳(Host 的 localtime,是从 1970-01-01T00:00:00Z. 开始的计时)
- 返回
- uint64_t 返回系统时间戳,单位:微秒
在文件 OB2Camera.hpp 第 803 行定义.
◆ get_source_camera_type()
获取图像源相机类型
通过 SDK 获取得到的图像都会填写源相机类型,代表了图像数据来源
- 返回
- ob2_camera_type_t 相机类型
在文件 OB2Camera.hpp 第 827 行定义.
◆ get_available_bits_for_each_pixel()
virtual uint8_t ob2::image::get_available_bits_for_each_pixel |
( |
| ) |
|
|
inlinevirtual |
获取图像像素有效位数
对于 Depth 和 IR 图像,通常其图像像素只有低位有效,高位固定为零。(比如某相机深度是 Y16 格式的图像,其像素位数为 16, 但是只有低 14 位有效,高两位为零,此时调用本接口将返回 14)
- 返回
- uint8_t 返回图像像素有效位数
在文件 OB2Camera.hpp 第 854 行定义.
◆ get_value_scale()
virtual float ob2::image::get_value_scale |
( |
| ) |
|
|
inlinevirtual |
获取深度图像数值缩放系数
深度图像像素值意义为目标物体到相机的距离,单位为 mm。但是,由于相机特性、算法处理等原因,实际图像的数值可能会被缩放。 本接口返回用于将图像数据恢复为以毫米为单位的数值时所需要缩放的系数, 比如,scale=0.1 时, 某坐标下像素值为 pixel_value=10000, 则表示深度距离 value = pixel_Value*scale = 10000*0.1=1000mm。
- 注意
- 仅深度图像有效,非深度图像调用本接口将会抛出 std::runtime_error 异常
- 返回
- uint8_t 返回深度图数值缩放系数
在文件 OB2Camera.hpp 第 887 行定义.
◆ get_handle()
获取图像句柄
- 注意
- 获取句柄不会增加句柄引用计数,其生命周期还是由图像对象管理,即通图像析构后会释放句柄
- 返回
- ob2_image_t 返回图像句柄
在文件 OB2Camera.hpp 第 914 行定义.
◆ buffer_release_callback()
static void ob2::image::buffer_release_callback |
( |
uint8_t * |
buffer, |
|
|
void * |
user_data |
|
) |
| |
|
inlinestaticprotected |
◆ m_image_handle
在文件 OB2Camera.hpp 第 925 行定义.
被这些函数引用 get_available_bits_for_each_pixel(), get_buffer(), get_device_timestamp_usec(), get_format(), get_handle(), get_height_pixels(), get_size(), get_source_camera_type(), get_stride_bytes(), get_system_timestamp_usec(), get_value_scale(), get_width_pixels(), image() , 以及 ~image().
◆ m_buffer_release_cb
该类的文档由以下文件生成:
- C:/Users/hzcyf/projects/SensorSDK/libobsensor2/include/hpp/OB2Camera.hpp