0

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 つの画像が並べて表示され、最初の画像は最初の方法を使用しています。最初の方法で正しい画像が表示されない理由。 ここに画像の説明を入力

4

1 に答える 1

0

問題は、アレイを開始してマトリックスに入れる方法にあると思います。リンクをチェックして、問題の場所を確認できます。

以下の作業サンプルも添付します。

float* d = new float[w*h];
for (int dy = 0; dy<intrins.height; ++dy)
{
    for (int dx = 0; dx<intrins.width; ++dx)
    {
        uint16_t depth_value = depth_image[dy * intrins.width + dx];
        float depth_in_meters = depth_value * scale;
        if (depth_value == 0) { d[dy * intrins.width + dx] = 0;  continue; }
        d[dy * intrins.width + dx] = depth_in_meters;
    }
}
Mat depthimage(h, w, CV_32FC1, d);
Mat object;
threshold(depthimage, object, 0.5, 255, THRESH_BINARY);
imshow(window_name, object);
于 2018-06-05T02:08:53.143 に答える