aihot  2017-04-28 00:04:00  OpenCV |   查看评论   

 要实现目标:整合前面所说的彩色图像、深度图像和骨骼图像,就是实现和SDK自带的那个SkeletonView例程差不多的功能。另外,再增加用户抠图功能,这个功能和SDK自带的那个Green Screen功能差不多。我们通过OpenCV来显示。

 

一、前期分析

       这里因为是整合前面几个学习笔记提到的功能,所以要了解的东西前面都已经了解了,这里就不赘述了。这里唯一有一个新的点就是用户抠图,我们再学习学习。

       那么叫抠图啊?用过Photoshop或者AE等一般的图像或者视频处理软件的人应该不会陌生。所谓抠图,就是把图片或影像的某一部分从原始图片或影像中分离出来成为单独的图层。主要功能是为了后期的合成做准备。如果还不了解的话,我们看过科幻电影或者一个特效视频吧?某个人在恐龙旁边、某个人在悬崖边打架、某个人在天上飞等等,这些场景大家有没有想过它是怎样实现的啊?难道真的是实景拍的?你都会说了“怎么可能!”。实际上很大一部分就是采用抠图这个技术的,如果搞视频特效处理的话,这个技术行业内好像叫“键控”。它在电视制作和电影制作中很常见,这种技术叫做绿屏抠像,就是演员或者播音员站在绿色底板前,然后录完节目后,绿色背景抠出,换成其他场景,在一些科幻电影中演员不可能在实景中表演时常采用的造景手法。

       在Kinect中我们也可以达到类似的效果。Kinect SDK使得这个很容易实现。这实际上就是现实增强的一个基本例子,现实增强应用非常有趣而且能够获得非常好的用户体验。许多艺术家使用Kinect来进行现实增强交互展览。另外,这种技术也通常作为广告和营销的工具。

 

二、与注释

  1. #include <windows.h>  
  2. #include <iostream>   
  3. #include <NuiApi.h>  
  4. #include <opencv2/opencv.hpp>  
  5.   
  6. using namespace std;  
  7. using namespace cv;  
  8.   
  9. bool tracked[NUI_SKELETON_COUNT]={FALSE};   
  10. CvPoint skeletonPoint[NUI_SKELETON_COUNT][NUI_SKELETON_POSITION_COUNT]={cvPoint(0,0)};   
  11. CvPoint colorPoint[NUI_SKELETON_COUNT][NUI_SKELETON_POSITION_COUNT]={cvPoint(0,0)};   
  12.    
  13. void getColorImage(HANDLE &colorEvent, HANDLE &colorStreamHandle, Mat &colorImage);   
  14. void getDepthImage(HANDLE &depthEvent, HANDLE &depthStreamHandle, Mat &depthImage);   
  15. void getSkeletonImage(HANDLE &skeletonEvent, Mat &skeletonImage, Mat &colorImage, Mat &depthImage);   
  16. void drawSkeleton(Mat &image, CvPoint pointSet[], int witchone);   
  17. void getTheContour(Mat &image, int whichone, Mat &mask);  
  18.   
  19. int main(int argc, char *argv[])  
  20. {  
  21.     Mat colorImage;  
  22.  1/12    1 2 3 4 5 6 下一页 尾页
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自Kinect开发学习笔记之彩色、深度、骨骼和用户抠图结合

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]