Kinect深度和彩色图像

时间:2014-06-04 08:10:49

标签: opencv kinect

我的深度贴图有点问题,指向颜色贴图, 我只是将nearst深度(约70-80cm)阈值,然后按位和阈值深度图像到相应的颜色图,

Mat depthFilter(Mat depth,Mat color){
Mat I;
depth.convertTo(I, CV_8UC1, 255.0 / 4096.0);
unsigned char *input = (unsigned char*)(I.data);
for (int i = 0; i < I.cols; i++){
    for (int j = 0; j < I.rows; j++){
        int pixel = input[I.cols*j + i];
        if (!(pixel <52 && pixel >42)){
            input[I.cols*j + i] = 0;
        }
        else
        {
            input[I.cols*j + i] = 255;
        }
    }
}
cvtColor(color, color, CV_BGR2GRAY);
bitwise_and(I, color, I);
return I;

} (我使用OpenCvKinect,它使用OpenNi和OpenCv) 但我的问题是,要点不一样......我想我需要找到两个图像之间的关系,但是如何:)!

http://postimg.org/image/hyxt25bwd/

2 个答案:

答案 0 :(得分:0)

我会看到Why kinect color and depth won't align correctly?,因为他们在matlab中遇到了类似的问题。答案建议使用OpenNI的AlternateViewCapability类来对齐图像。这是旧版OpenNI(1.5)的文档,因为我找不到C ++的2.0文档,但可能有类似的方法。答案上的图像显示了转变的差异。

代码基本上是

depth.GetAlternativeViewPointCap().SetViewPoint(image); //depth is depth generator
                                                        //image is color generator

答案 1 :(得分:0)

我不确定您是否已经解决了对齐问题,但这已在您已使用的OpenCVKinect Wrappers中实现。

要从Kinect获取对齐的深度和彩色图像,您需要使用setMode功能,如下所示:

setMode(C_MODE_DEPTH | C_MODE_COLOR | C_MODE_ALIGNED);