http://blog.csdn.net/guoming0000/article/details/6975737
1. 安装Kinect驱动
安装驱动前,看下右侧的Installation instructions,这里简单翻译下:
- 体感不要连在电脑上
- 如果以前装了Kinect SDK要卸载它
- 关闭Visual Studio2010
http://www.kinectforwindows.org/download/
根据硬件平台选择要装的驱动(64bit安装64bit驱动,32bit安装32bit驱动)
(1)KinectSDK-v1.0-beta2-x86.msi OR KinectSDK-v1.0-beta2-x64.msi
(2)看看自己硬件是否符合要求,使用的是VS2010和Win7系统(恰好这二个我已经熟悉了,很多人依旧不用VS2010)
(3)为了能运行他给出的SkeletalViewer程序我们还要安装Microsoft DirectX® SDK – June 2010 or later version 和Runtime for Microsoft DirectX® 9
(4)如果你要使用语音功能,使用SpeechSamples那么继续安装,把他给的后面三个驱动都装了。注意安装和硬件平台对应的驱动。
2.体感(Kinect)
买体感前确保它可以使用220V电源(我买的是台版,电压接受范围很大- -),一般买的是盒装的,他专门用于开发(但里面附增了一个正版游戏光碟,让我郁闷了)
先给体感连上电源,再把体感另一头USB接口连上电脑(那个附带的数据转换线是用来连接老式Xbox主机的,无视掉吧。)
如果你安装了驱动以及的USB没有问题(我第一次插入时USB失灵了),会看到右下角图标处有反应,双击出来看看。
正在安装驱动中
经过几分钟的等待,都安装上了!
设备管理器中也可以看到,这里说明安装成功了。我们可以看到体感摄像头中间的绿灯闪烁。
如果你第二次安装(这一次很快),那显示下图:
2.运行示例程序
程序在类似如下的目录,根据你安装的SDK目录了,如果默认这是c盘下。
Program FilesMicrosoft SDKsKinectv1.0Beta2Samplesbin
你可以选择SkeletalViewer等运行试试效果。(注意骨骼图只有大于1.2米能会有效果)
3.最后再给出一个OpenCV打开摄像头的程序
首先要说明,本人虽然用64bit计算机但所有有关软件的配置都是按照32bit程序配置的,至今使用64bit电脑还么有写出过一个32bit的程序。囧。
配置问题:
打开项目属性页-à配置属性àVC++目录 中的”包含目录”,添加$(KINECTSDK_DIR)inc,
库目录添加$(KINECTSDK_DIR)libx86。
连接器—>输入à附加依赖项,添加MSRKinectNUI.lib
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
// kongzhitai.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> using namespace std; using namespace cv; //KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK #include "windows.h" #include "MSR_NuiApi.h" //KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK int main(int argc,char * argv[]) { //初始化NUI HRESULT hr = NuiInitialize( NUI_INITIALIZE_FLAG_USES_COLOR); if( hr != S_OK ) { cout<<"NuiInitializefailed"<<endl; return hr; } //打开KINECT设备的彩色图信息通道 HANDLE h1 = CreateEvent( NULL,TRUE, FALSE, NULL ); HANDLE h2 = NULL; hr = NuiImageStreamOpen( NUI_IMAGE_TYPE_COLOR, NUI_IMAGE_RESOLUTION_640x480, 0, 4, h1, &h2); if( FAILED( hr ) ) { cout<<"Could notopen image stream video"<<endl; return hr; } //开始读取彩色图数据 Matimg;img.create(480,640,CV_8UC3); uchar *pData; while(1) { WaitForSingleObject(h1,INFINITE); const NUI_IMAGE_FRAME *pImageFrame = NULL; hr = NuiImageStreamGetNextFrame( h2, 0, &pImageFrame ); if( FAILED( hr ) ) { cout<<"GetImage Frame Failed"<<endl; continue; } INuiFrameTexture * pTexture =pImageFrame->pFrameTexture; NUI_LOCKED_RECT LockedRect; pTexture->LockRect( 0,&LockedRect, NULL, 0 ); if( LockedRect.Pitch != 0 ) { BYTE * pBuffer = (BYTE*)LockedRect.pBits; for(int i=0;i<480;i++) { pData=img.ptr<uchar>(i); for(int j=0;j<640;j++) { for(int k=0;k<3;k++) *(pData+j*3+k)=*(pBuffer+i*4*640+j*4+k); } } imshow("rgb",img); waitKey(36); imwrite("H:\out.jpg",img); } if( LockedRect.Pitch != 0 ) { BYTE * pBuffer = (BYTE*)LockedRect.pBits; //显示x200y400位置上的像素信息 pBuffer +=(200+399*640)*4; printf("x:200 y:400坐标处的像素颜色:r:%d g:%d b:%dn",pBuffer[2],pBuffer[1],pBuffer[0]); } else { cout<<"Bufferlength of received texture is bogusrn"<<endl; } //释放本帧数据,准备迎接下一帧 NuiImageStreamReleaseFrame(h2, pImageFrame ); } //关闭NUI链接 NuiShutdown(); return 0; } |
不过此程序占用CPU比较大,本人i7机器上,占用了20%,有时会飙到30%,十分郁闷。通过方法改进也没有改进出来。而微软给的例子的效果特别好,只占用5%的CPU。我以为是DirectX的问题,这二天用MFC改写了下,效果依旧很差,发现也不是DirectX的问题。而微软使用底层API函数写的,效率却很高,弄了半天也没弄明白。接下来如果有空,我将分享一下在MFC下开发Kinect的经验(就是把图像显示出来,不影响按钮的操作)。目前有些问题还没有很好的解决,所以不能把不够成熟的东西拿出来。先说下,我在MFC下的框架用了多线程(工作者线程),工作者线程中通过SendMessage向主线程发送消息处理。暂时没有考虑到线程同步啊,锁啊之类东西。如果有人知道更好的方法,欢迎留言。
附录
1. 参考网站,http://www.cnkinect.com/
2. 百度文库: Kinect(幻象)sdk编程指南
3. 百度文库: skeletalviewer中文文档
安装过程的问题
安装MicrosoftDirectX SDK(June 2010)发生错误。(不过我发现,他是最后才发生错误的,对程序实际运行目前发现没有任何影响。下面是有些人的解决方法,如果你无法运行SkeletalViewer,可能需要参考下)
http://www.docin.com/p-60410380.html#
regedit.打开HKEY_LOCAL_MACHINESOFTWAREMicrosoftDirectX
里面有2个选项要修改,一个是Version,一个也许是ManagedDirectXVersion或者其他Version,把这2个值都改小,改成能正常安装为止,可以参考”C:WindowsDirectX.log”内容