kinect sdk 1.5 face tracking --- 使用opencv显示后的超级简化版本_第1页
kinect sdk 1.5 face tracking --- 使用opencv显示后的超级简化版本_第2页
kinect sdk 1.5 face tracking --- 使用opencv显示后的超级简化版本_第3页
kinect sdk 1.5 face tracking --- 使用opencv显示后的超级简化版本_第4页
kinect sdk 1.5 face tracking --- 使用opencv显示后的超级简化版本_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Kinect SDK 1.5 Face Tracking - 使用 opencv 显示后的 超级简化版本 VS2010+opencv2.3.1+Kinect SDK1.5 驱动什么的,大家自己安装,木有基础的同学先学好基础先。代码是基于我之前更新的 SDK1.5 基础之上的,如果不太懂,先看之前的文章 /guoming0000/article/details/7607473 免积分下载 VS2010 项目源码地址 / win32_KinectFaceTracking.cpp : 定义控制台应用程序的入口点。 / #include “stdafx.h“ /- #define _WINDOWS #include HRESULT VisualizeFaceModel(IFTImage* pColorImg, IFTModel* pModel, FT_CAMERA_CONFIG const* pCameraConfig, FLOAT const* pSUCoef, FLOAT zoomFactor, POINT viewOffset, IFTResult* pAAMRlt, UINT32 color); /- #include #include #include #include #include #include #include “opencv2opencv.hpp“ using namespace std; using namespace cv; #include #include #include #include #include “NuiApi.h“ #define COLOR_WIDTH 640 #define COLOR_HIGHT 480 #define DEPTH_WIDTH 320 #define DEPTH_HIGHT 240 #define SKELETON_WIDTH 640 #define SKELETON_HIGHT 480 #define CHANNEL 3 BYTE bufDEPTH_WIDTH*DEPTH_HIGHT*CHANNEL; int drawColor(HANDLE h); int drawDepth(HANDLE h); int drawSkeleton(); /-face tracking- BYTE *colorBuffer,*depthBuffer; IFTImage* pColorFrame; IFTImage* pDepthFrame; FT_VECTOR3D m_hint3D2; /- HANDLE h1; HANDLE h3; HANDLE h5; HANDLE h2; HANDLE h4; DWORD WINAPI VideoFunc(LPVOID pParam) / coutpFrameTexture; NUI_LOCKED_RECT LockedRect; pTexture-LockRect( 0, if( LockedRect.Pitch != 0 ) BYTE * pBuffer = (BYTE*) LockedRect.pBits; colorBuffer = pBuffer; memcpy(pColorFrame-GetBuffer(), PBYTE(LockedRect.pBits), min(pColorFrame-GetBufferSize(), UINT(pTexture-BufferLen(); Mat temp(COLOR_HIGHT,COLOR_WIDTH,CV_8UC4,pBuffer); imshow(“b“,temp); waitKey(1); NuiImageStreamReleaseFrame( h, pImageFrame ); return 0; int drawDepth(HANDLE h) const NUI_IMAGE_FRAME * pImageFrame = NULL; HRESULT hr = NuiImageStreamGetNextFrame( h, 0, if( FAILED( hr ) ) coutpFrameTexture; NUI_LOCKED_RECT LockedRect; pTexture-LockRect( 0, if( LockedRect.Pitch != 0 ) USHORT * pBuff = (USHORT*) LockedRect.pBits; / depthBuffer = pBuff; memcpy(pDepthFrame-GetBuffer(), PBYTE(LockedRect.pBits), min(pDepthFrame-GetBufferSize(), UINT(pTexture-BufferLen(); for(int i=0;i3; BYTE scale = 255 - (BYTE)(256*realDepth/0x0fff); bufCHANNEL*i = bufCHANNEL*i+1 = bufCHANNEL*i+2 = 0; switch( index ) case 0: bufCHANNEL*i=scale/2; bufCHANNEL*i+1=scale/2; bufCHANNEL*i+2=scale/2; break; case 1: bufCHANNEL*i=scale; break; case 2: bufCHANNEL*i+1=scale; break; case 3: bufCHANNEL*i+2=scale; break; case 4: bufCHANNEL*i=scale; bufCHANNEL*i+1=scale; break; case 5: bufCHANNEL*i=scale; bufCHANNEL*i+2=scale; break; case 6: bufCHANNEL*i+1=scale; bufCHANNEL*i+2=scale; break; case 7: bufCHANNEL*i=255-scale/2; bufCHANNEL*i+1=255-scale/2; bufCHANNEL*i+2=255-scale/2; break; Mat b(DEPTH_HIGHT,DEPTH_WIDTH,CV_8UC3,buf); imshow(“depth“,b); waitKey(1); NuiImageStreamReleaseFrame( h, pImageFrame ); return 0; int drawSkeleton() NUI_SKELETON_FRAME SkeletonFrame; cv:Point pt20; Mat skeletonMat=Mat(SKELETON_HIGHT,SKELETON_WIDTH,CV_8UC3,Scalar(0,0, 0); HRESULT hr = NuiSkeletonGetNextFrame( 0, if( FAILED( hr ) ) coutInitialize( if( FAILED(hr) ) return -2;/ Handle errors / Create IFTResult to hold a face tracking result IFTResult* pFTResult = NULL; hr = pFT-CreateFTResult( if(FAILED(hr) return -11; / prepare Image and SensorData for 640x480 RGB images if(!pColorFrame) return -12;/ Handle errors / Attach assumes that the camera code provided by the application / is filling the buffer cameraFrameBuffer / pColorFrame-Attach(640, 480, colorBuffer, FTIMAGEFORMAT_UINT8_B8G8R8X8, 640*3); hr = pColorFrame-Allocate(640, 480, FTIMAGEFORMAT_UINT8_B8G8R8X8); if (FAILED(hr) return hr; hr = pDepthFrame-Allocate(320, 240, FTIMAGEFORMAT_UINT16_D13P3); if (FAILED(hr) return hr; FT_SENSOR_DATA sensorData; sensorData.pVideoFrame = pColorFrame; sensorData.pDepthFrame = pDepthFrame; sensorData.ZoomFactor = 1.0f; POINT point;point.x=0;point.y=0; sensorData.ViewOffset = point; bool isTracked = false; int iFaceTrackTimeCount=0; / Track a face while ( true ) / Call your camera method to process IO and fill the camera buffer / cameraObj.ProcessIO(cameraFrameBuffer); / replace with your method if(!isTracked) hr = pFT-StartTracking( if(SUCCEEDED(hr) else / Handle errors isTracked = false; else / Continue tracking. It uses a previously known face position, / so it is an inexpensive call. hr = pFT-ContinueTracking( if(FAILED(hr) | FAILED (pFTResult-GetStatus() / Handle errors isTracked = false; if(isTracked) printf(“被跟踪了!!n“); IFTModel* ftModel; HRESULT hr = pFT-GetFaceModel( FLOAT* pSU = NULL; UINT numSU; BOOL suConverged; pFT-GetShapeUnits(NULL, POINT viewOffset = 0, 0; hr = VisualizeFaceModel(pColorFrame, ftModel, if(FAILED(hr) printf(“显示失败!n“); Mat tempMat(COLOR_HIGHT,COLOR_WIDTH,CV_8UC4,pColorFrame- GetBuffer(); imshow(“faceTracking“,tempMat); waitKey(1); /printf(“%dn“,pFTResult-GetStatus(); / Do something with pFTResult. Sleep(16); iFaceTrackTimeCount+; if(iFaceTrackTimeCount16*1000) break; / Terminate on some criteria. / Clean up. pFTResult-Release(); pColorFrame-Release(); pFT-Release(); CloseHandle(hThread1); CloseHandle(hThread2); CloseHandle(hThread3); Sleep(60000); NuiShutdown(); return 0; HRESULT VisualizeFaceModel(IFTImage* pColorImg, IFTModel* pModel, FT_CAMERA_CONFIG const* pCameraConfig, FLOAT const* pSUCoef, FLOAT zoomFactor, POINT viewOffset, IFTResult* pAAMRlt, UINT32 color) if (!pColorImg | !pModel | !pCameraConfig | !pSUCoef | !pAAMRlt) return E_POINTER; HRESULT hr = S_OK; UINT vertexCount = pModel-GetVertexCount(); FT_VECTOR2D* pPts2D = reinterpret_cast(_malloca(sizeof(FT_VECTOR2D) * vertexCount); if (pPts2D) FLOAT *pAUs; UINT auCount; hr = pAAMRlt-GetAUCoefficients( if (SUCCEEDED(hr) FLOAT scale, rotationXYZ3, translationXYZ3; hr = pAAMRlt-Get3DPose( if (SUCCEEDED(hr) hr = pModel-GetProjectedShape(pCameraConfig, zoomFactor, viewOffset, pSUCoef, pModel-GetSUCount(), pAUs, auCount, scale, rotationXYZ, translationXYZ, pPts2D, vertexCount); if (SUCCEEDED(hr) POINT* p3DMdl = reinterpret_cast(_malloca(sizeof(POINT) * vertexCount); if (p3DMdl) for (UINT i = 0; i GetTriangles( if (SUCCEEDED(hr) struct EdgeHashTable UINT32* pEdges; UINT edgesAlloc; void Insert(int a, int b) UINT32 v = (min(a, b) (_malloca(sizeof

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论