kinect2.0 之摄像头

一. 原因:需要使用kinect2.0的摄像头数据作处理跟踪,所以需要研究一下。

二. kinect摄像头有两个,但深度摄像头兼具有深度摄像头功能和红外摄像头功能。

  深度摄像头分辨率:512X424,稳定距离:500mm-4000mm。‘

  红外摄像头分辨率:512X424,距离远了,不行,这个跟红外光强度有关。

 彩色摄像头分辨率:1920X1080.

三. 三种摄像头调用结构很相似,可参考sample下的,DepthBasics-D2D,ColorBasics-D2D,InfraredBasics-D2D。归类总结如下:

    1. 声明三个类: 深度摄像头:IDepthFrame,红外摄像头:IInfraredFrame,彩色摄像头:IColorFrame

    2.   初始化kinet,三个摄像头一样,函数InitializeDefaultSensor(),改成对应的类就行。

    3. 帧刷新均在Update中

        AcquireLatestFrame()为获得最近刷新帧;

        get_FrameDescription()为获得帧信息;

        pFrameDescription->get_Width(&nWidth);获得帧宽度;

        pFrameDescription->get_Height(&nHeight);获得帧高度;

       pDepthFrame->get_DepthMinReliableDistance(&nDepthMinReliableDistance);获得稳定深度最小距离,深度摄像头独有。

       pDepthFrame->get_DepthMaxReliableDistance(&nDepthMaxDistance);获得稳定深度最大距离,深度摄像头独有。

       AccessUnderlyingBuffer(&nBufferSize, &pBuffer);获得数据到内存中。这里获得的数据可以被我们调用所处理。

      ProcessDepth(nTime, pBuffer, nWidth, nHeight, nDepthMinReliableDistance, nDepthMaxDistance);深度摄像头处理函数

 4.重点讲下深度摄像头的处理:

        while (pBuffer < pBufferEnd)
        {

            ++pBuffer;数据地址加

            USHORT depth = *pBuffer;获得单个深度数据,注意mm为单位。

         if((depth〉500)&&(depth<1000))  

     {

                                              sprintf(str, "%d;%d;%ld \n", col, row, depth);
fputs(str, f);//可以通过距离过滤不需要的深度数据,这里将500mm-1000mm的数据存入文件

      }

   }

其它摄像头同理可通过pBuffer获得图像数据,结合opencv做处理。

5.三摄像头显示效果

深度和彩色。深度摄像头对反光的物体侦测不到


红外摄像头,对黑色物体显示不出来,因为黑色吸收红外,所以看到个盒子。



       总结:接下来可以使用这么多图像性息,来做很多事情了。

阅读更多
文章标签: kinect2.0
个人分类: kinect
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭