c++ - 从(视频)帧英特尔实感获取 RGB 值时出现指针异常
问题描述
我正在尝试使用 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.
我将.h 文件中的位置设置enable_stream
为:cfg.enable_stream(RS2_STREAM_COLOR, WIDTH_COLOR_FRAME, HEIGTH_COLOR_FRAME, RS2_FORMAT_RGB8, 15);
#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;
提前致谢!
解决方案
步幅以字节为单位(行的长度以字节为单位),不需要乘以 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]);
推荐阅读
- python - Customize the Dictionary and List output
- powershell - How to transfer files to different sub folders based on file name
- redis - Redis Sentinel 无法连接到从站
- javascript - Settimer 在延迟后只调用一次,但是,它不是在 React Native 中重复调用
- r - 如何解决“没有这样的文件或目录”的原因?
- javascript - 面临在 ReactJs 中传递 props 的问题
- node.js - 使用 --input-type 时无法加载本地目录 Node.js 模块
- ruby-on-rails - 尝试在 Mac OS X 10.14.5 上通过 rbenv 安装 Ruby 时出现 BUILD FAILED
- regex - 为我的robot.txt 的一些网址创建正则表达式
- python - 回归模型/非线性回归