ZR300 を使用して深度データを取得します。
2 つの方法で深度データを取得しました。
最初のものは直接取るdepth stream
const uint16_t * depth_image = (const uint16_t *)dev->get_frame_data(rs::stream::depth);
完全なスクリプトは
const uint16_t * depth_image = (const uint16_t *)dev->get_frame_data(rs::stream::depth);
float scale = dev->get_depth_scale();
float **data;
data = new float *[HEIGHT];
for(int dy=0; dy<depth_intrin.height; ++dy)
{
data[dy] = new float[WIDTH];
for(int dx=0; dx<depth_intrin.width; ++dx)
{
uint16_t depth_value = depth_image[dy * depth_intrin.width + dx];
float depth_in_meters = depth_value * scale;
if(depth_value == 0) continue;
data[dy][dx] = depth_in_meters;
}
}
Mat depthimage(HEIGHT, WIDTH, CV_32FC1, *data);
Mat object;
threshold(depthimage, object, 0.5, 255, THRESH_BINARY);
imshow("object", object);
waitKey(1);
2 番目のアプローチは、次の例に示すとおりです。
glPixelTransferf(GL_RED_SCALE, 0xFFFF * dev->get_depth_scale() / 2.8f);
glDrawPixels(WIDTH, HEIGHT, GL_RED, GL_UNSIGNED_SHORT, dev->get_frame_data(rs::stream::depth));
glPixelTransferf(GL_RED_SCALE, 1.0f);
しかし、2 つのイメージは一致しません。2 つの画像が並べて表示され、最初の画像は最初の方法を使用しています。最初の方法で正しい画像が表示されない理由。