kinect for windows - DepthBasics-D2D详解之三

这篇文章我们将总结一下,之前两篇文章中提到的Kinect SDK的函数接。

函数接口:

NuiGetSensorCount: 获取连接的Kinect设备个数

原型:_Check_return_ HRESULT NUIAPI NuiGetSensorCount( _In_ int * pCount );

解释:KinectSDK支持多个Kinect设备连接,这个函数能获取到Kinect设备个数。

返回值:返回S_OK是成功,其他失败,其中E_POINTER表示pCount是空指针错误。


NuiCreateSensorByIndex:通过索引创建INuiSensor对象

原型:_Check_return_ HRESULT NUIAPI NuiCreateSensorByIndex( _In_ int index, _Out_ INuiSensor ** ppNuiSensor );

解释:通过指定的下标,获取对应的KinectSensor对象

返回值:返回S_OK是成功,其他失败,错误码有:E_INVALIDARG(index是负数),E_NUI_BADINDEX(index超出范围),E_POINTER(ppNuiSensor是空指针)


NuiStatus:获取Kinect设备状态,它是INuiSensor的成员函数

原型:virtual HRESULT STDMETHODCALLTYPE NuiStatus( void) = 0;

解释:当获取到INuiSensor对象时,应该调用这个函数查看Kinect设备状态,如果状态不对,也是不能使用的。

返回值:返回S_OK是正常,其他失败,错误码如下:

S_NUI_INITIALIZINGThe device is connected, but still initializing.设备初始化中
E_NUI_NOTCONNECTEDThe device is not connected.设备未连接
E_NUI_NOTGENUINEThe device is not a valid Kinect.不是一个正常的Kinect
E_NUI_NOTSUPPORTEDThe device is an unsupported model.模式不支持
E_NUI_INSUFFICIENTBANDWIDTHThe device is connected to a hub without the necessary bandwidth requirements.插到usb hub中产生的问题
E_NUI_NOTPOWEREDThe device is connected, but unpowered.没插电
E_NUI_NOTREADYThere was some other unspecified error.未知错误

NuiInitialize:初始化Kinect设备

原型:virtual HRESULT STDMETHODCALLTYPE NuiInitialize( 
            /* [in] */ DWORD dwFlags) = 0;

参数:指定初始化模式

ConstantDescription
NUI_INITIALIZE_DEFAULT_HARDWARE_THREADThis flag was deprecated in version 1.5; it is no longer used.
NUI_INITIALIZE_FLAG_USES_AUDIOInitialize the sensor to provide audio data.
NUI_INITIALIZE_FLAG_USES_COLORInitialize the sensor to provide color data.
NUI_INITIALIZE_FLAG_USES_DEPTHInitialize the sensor to provide depth data.
NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEXInitialize the sensor to provide depth data with a player index.
NUI_INITIALIZE_FLAG_USES_SKELETONInitialize the sensor to provide skeleton data.

解释:一个设备只有第一次调用这个函数时候会成功,其他应用程序再调用这个函数会失败,也就是说一个设备只能给一个程序用。

返回值:S_OK成功,其他失败


NuiImageStreamOpen:打开Kinect流

原型: virtual HRESULT STDMETHODCALLTYPE NuiImageStreamOpen( 
            /* [in] */ NUI_IMAGE_TYPE eImageType,                        // 类型
            /* [in] */ NUI_IMAGE_RESOLUTION eResolution,        // 分辨率
            /* [in] */ DWORD dwImageFrameFlags,                         // 帧事件选项
            /* [in] */ DWORD dwFrameLimit,                                      //  kinect缓存的帧数量
            /* [in] */ HANDLE hNextFrameEvent,                                // 手动reset的event,当下一帧数据到来时,kinect会reset它
            /* [out] */ HANDLE *phStreamHandle) = 0;                  //  数据流句柄

返回值:S_OK表示成功,其他失败

ErrorDescription
E_FAILAn unspecified error occurred.
E_INVALIDARGThe value of the dwFlags parameter is NULL.
E_NUI_DEVICE_NOT_READYKinect has not been initialized.
E_OUTOFMEMORYThe allocation failed.
E_POINTERThe hNextFrameEvent parameter is an invalid handle.

NuiImageStreamGetNextFrame:取一帧数据

原型:virtual HRESULT STDMETHODCALLTYPE NuiImageStreamGetNextFrame( 
            /* [in] */ HANDLE hStream, // 数据流
            /* [in] */ DWORD dwMillisecondsToWait,           // 等待时间
            /* [retval][out] */ NUI_IMAGE_FRAME *pImageFrame) = 0;  // 保存数据的指针

返回值:S_OK成功,其他失败

ErrorDescription
S_FALSEThe waiting timeout expired before a frame was available and hStream was opened using the NUI_IMAGE_STREAM_FLAG_SUPPRESS_NO_FRAME_DATA flag.
E_INVALIDARGThe value of the hStream parameter is NULL.
E_NUI_FRAME_NO_DATAThe waiting timeout expired before a frame was available.
E_POINTERThe value of the pImageFrame parameter is NULL.



NuiImageFrameGetDepthImagePixelFrameTexture:将深度图转化成纹理

原型:virtual HRESULT STDMETHODCALLTYPE NuiImageFrameGetDepthImagePixelFrameTexture( 

            /* [in] */ HANDLE hStream,                                        // 数据流
            /* [in] */ NUI_IMAGE_FRAME *pImageFrame,       // 帧数据
            /* [out] */ BOOL *pNearMode,                                    // 近模式,如果kinect离物体比较近,一般就会选择近模式
            /* [out] */ INuiFrameTexture **ppFrameTexture) = 0;   // 输出参数,转换后的纹理

返回值:S_OK成功,其他失败


LockRect:锁住矩形区域数据,让Kinect不要修改那些数据

原型:virtual HRESULT STDMETHODCALLTYPE LockRect(

                                             UINT Level,    // 必须为0

                                             NUI_LOCKED_RECT* pLockedRect,  // 传出参数,记录矩形

                                             RECT* pRect,   // 该参数暂时不用

                                              DWORD flags) = 0;  // 该参数暂时不用

返回值:S_OK成功,其他失败

ErrorDescription
E_INVALIDARGThe Level parameter is not zero.
E_OUTOFMEMORYThe texture buffer could not be allocated.
E_POINTERThe pLockedRect parameter is NULL or the texture has zero height.

UnlockRect:解锁

原型:HRESULT UnlockRect(UINT level); // Level参数必须为0

返回值:S_OK成功,其他失败,可能的错误码为E_INVALIDARG(level参数不为0)

ErrorDescription
S_FALSEThe waiting timeout expired before a frame was available and hStream was opened using the NUI_IMAGE_STREAM_FLAG_SUPPRESS_NO_FRAME_DATA flag.
E_INVALIDARGThe value of the hStream parameter is NULL.
E_NUI_FRAME_NO_DATAThe waiting timeout expired before a frame was available.
E_POINTERThe value of the pImageFrame parameter is NULL.

posted on 2014-03-02 20:41  三少爷的剑123  阅读(188)  评论(0编辑  收藏  举报

导航