2

私は OpenKinect と OpenCV ライブラリの組み合わせを使用して、Haar のような特徴認識を RGB 画像と深度画像の両方に適用しています。

ライブ フィードを取得し、RGB フィードを使用してオブジェクトを正常に検出できますが、深さが大きな問題を引き起こしています。

最初のフレームの後、深度フレームはまったく更新されないようです。

生データを提供する深度コールバック関数は次のとおりです。

//depth callback function
void depth_cb(freenect_device *dev, void *v_depth, uint32_t timestamp)
{
    if (got_depth == 0){
        pthread_mutex_lock(&buf_mutex);

        //copy to OpenCV buffer
        memcpy(depthMat.data, v_depth, (640*480*2));
       // depthMat.convertTo(depthFrame, CV_8UC1, 256.0/2048.0);
        got_depth++;

        pthread_cond_signal(&frame_cond);
        pthread_mutex_unlock(&buf_mutex);
    }
}

使用されるマットは次のように初期化されます。

cv::Mat depthMat(cv::Size(640,480),CV_16UC1);
cv::Mat depthFrame(cv::Size(640,480),CV_8UC1);

そして、メイン関数では、次のように使用してみます。

        depthMat.convertTo(depthFrame, CV_8UC1, 255.0/2048.0);

        imshow("rgb", rgbMat);
        imshow("depth-pre-conversion", depthMat);
        imshow("depth", depthFrame);

        IplImage depthImage = depthFrame;
        IplImage rgbImage = rgbMat;

        detect_and_draw(&depthImage);

「Depth-pre-conversion」はほぼ黒いフレームです。ここで深度画像をほぼ確認できます。更新されません。

'Depth' は 8 ビットに変換された軽いバージョンで、これも動きません。

'rgb' は問題なく動作するライブ RGB フィードです (ただし、RGB ではなく BGR ですが、いずれ修正する予定です。現時点ではそれほど重要ではありません)。

あなたが提供できるアドバイスと助けをいただければ幸いです。

4

0 に答える 0