私は 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 ですが、いずれ修正する予定です。現時点ではそれほど重要ではありません)。
あなたが提供できるアドバイスと助けをいただければ幸いです。