从(视频)帧英特尔实感获取 RGB 值时出现指针异常

Posted

技术标签:

【中文标题】从(视频)帧英特尔实感获取 RGB 值时出现指针异常【英文标题】:Pointer Exception while getting RGB values from (video) frame Intel Realsense 【发布时间】:2020-05-20 19:26:54 【问题描述】:

我正在尝试使用 Realsense SDK 从帧中获取不同的 RGB 值。这适用于具有 RGB 的 3D 深度相机。根据https://github.com/IntelRealSense/librealsense/issues/3364我需要使用

int i = 100, j = 100; // fetch pixel 100,100
rs2::frame rgb = ...
auto ptr = (uint8_t*)rgb.get_data();
auto stride = rgb.as<rs2::video_frame>().stride();
cout << "R=" << ptr[3*(i * stride + j)];
cout << ", G=" << ptr[3*(i * stride + j) + 1];
cout << ", B=" << ptr[3*(i * stride + j) + 2];

在我的代码中,如果我想获取像素 (x,y)=1000,1000 的值,则会出现指针异常。 (x,y)=100,100 每次都有效...错误:Exception thrown: read access violation. ptr was 0x11103131EB9192A.

我将enable_stream 设置为cfg.enable_stream(RS2_STREAM_COLOR, WIDTH_COLOR_FRAME, HEIGTH_COLOR_FRAME, RS2_FORMAT_RGB8, 15); .h 文件中的位置:

#define WIDTH_COLOR_FRAME   1920
#define HEIGTH_COLOR_FRAME  1080

这是我的代码。也许它与RS2_FORMAT_RGB8有关?

frameset frames = pl.wait_for_frames();
frame color = frames.get_color_frame();

uint8_t* ptr = (uint8_t*)color.get_data();
int stride = color.as<video_frame>().get_stride_in_bytes();

int i = 1000, j = 1000; // fetch pixel 100,100

cout << "R=" << int(ptr[3 * (i * stride + j)]);
cout << ", G=" << int(ptr[3 * (i * stride + j) + 1]);
cout << ", B=" << int(ptr[3 * (i * stride + j) + 2]);
cout << endl;

提前致谢!

【问题讨论】:

【参考方案1】:

步幅以字节为单位(行的长度以字节为单位),不需要乘以 3。

cout << "  R= " << int(ptr[i * stride + (3*j)    ]);
cout << ", G= " << int(ptr[i * stride + (3*j) + 1]);
cout << ", B= " << int(ptr[i * stride + (3*j) + 2]);

【讨论】:

啊,就是这样。谢谢!但是我认为'3'站在错误的位置对吗? cout &lt;&lt; " R= " &lt;&lt; int(ptr[i * stride + (3*j) ]); cout &lt;&lt; ", G= " &lt;&lt; int(ptr[i * stride + (3*j) + 1]); cout &lt;&lt; ", B= " &lt;&lt; int(ptr[i * stride + (3*j) + 2]); 这是因为否则它将混合来自前一个像素的 RGB 值。感谢您的帮助!现在很清楚了

以上是关于从(视频)帧英特尔实感获取 RGB 值时出现指针异常的主要内容,如果未能解决你的问题,请参考以下文章

在 Unity 中获取英特尔实感深度流

英特尔® 实感™ SDK 2.0 上的英特尔实感 D435i 帧丢失

英特尔实感 C# 将流录制到文件

是否可以使用英特尔实感 SDK 在电影/3D 视频中进行人脸交换?

尝试从 Apache Beam 中的选项获取值时出现空指针异常

对数据帧火花执行操作时出现空指针异常