kinect学习笔记2

来源:互联网 发布:泛函是什么 知乎 编辑:程序博客网 时间:2024/05/17 15:21

kinect入门以后,又学习了一点关于opengl、ARToolkit和opencv的知识,接下来要实现的一个功能是:

用kinect捕获彩色图像,利用ARToolkit识别标志,显示虚拟物体。

参考博文:http://www.hitl.washington.edu/artoolkit/mail-archive/message-thread-00488-Intel-OpenCV-for-ARToolK.html

【为什么……上一篇写的关于ARToolkit配置的文章一直都没有审核通过呢……就这样失踪了!抓狂抓狂抓狂】

1.设计main函数:

(1)初始化

(2)主循环

(3)退出

2.函数功能划分:

(1)初始化:准备摄像机参数+初始化kinect

(2)主循环:获取被摄图像+检测标志+绘制模型

(3)退出:结束进程。

3.功能实现:

(1)主函数:

int main(int argc, char **argv){glutInit(&argc, argv);init();initKinect();argMainLoop( NULL, keyEvent, mainLoop );NuiShutdown();return (0);}


(2)初始化的函数实现:

static void init( void ){ARParam  wparam;xsize=640;ysize=480;if( arParamLoad(cparam_name, 1, &wparam) < 0 ) {printf("Camera parameter load error !!\n");exit(0);}arParamChangeSize( &wparam, xsize, ysize, &cparam );arInitCparam( &cparam );arParamDisp( &cparam );if( (patt_id=arLoadPatt(patt_name)) < 0 ) {//patt_id在这里被赋值printf("pattern load error !!\n");exit(0);}argInit( &cparam, 1.0, 0, 0, 0, 0 );}


 

static void initKinect(){if (FAILED(hr)){std::cout<<"NUIinitialize failed!"<<std::endl;return ;}nextColorFrameEvent =CreateEvent(NULL,true,FALSE,NULL);hr=NuiImageStreamOpen(NUI_IMAGE_TYPE_COLOR,NUI_IMAGE_RESOLUTION_640x480,0,2,nextColorFrameEvent,&colorStreamHandle);if (FAILED(hr)){std::cout<<"can not open the color stream"<<std::endl;NuiShutdown();return ;}}


(3)主循环的函数实现:

static void mainLoop(void){ARMarkerInfo    *marker_info;int             marker_num;int             j, k;if( count2 == 0 ) arUtilTimerReset();count2++;   //计数,循环多少次getpdataFromkinect(); //从kinect获取下一帧argDrawMode2D();//绘制模型?二维的需要绘制什么模型?argDispImage( pdata, 0,0 );//显示摄像头拍摄的图像image->imageData=(char *)pdata;cvCvtColor(image,imagegrey,CV_BGRA2GRAY);if( arDetectMarker(pdata, thresh, &marker_info, &marker_num) < 0 ) {cleanup();exit(0);}arVideoCapNext();k = -1;for( j = 0; j < marker_num; j++ ) {if( patt_id == marker_info[j].id ) {if( k == -1 ) k = j;else if( marker_info[k].cf < marker_info[j].cf ) k = j;}}if( k == -1 ) {argSwapBuffers();return;}arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans);draw();imagegreyPre->imageData=imagegrey->imageData;argSwapBuffers();}


程序的主要框架就是这些,由于科研要求这里不附完整代码,供自己记录和大家交流。

————————————————————————————

2014.7.10补充:

找到实用的ARToolkit程序解释:

http://blog.sina.com.cn/s/blog_7ebf4bbc0102uwvn.html

 

0 0
原创粉丝点击