安装

  • KinectSDK-v1.8-Setup.exe
  • OpenNI-Windows-x86-2.1.0.msi

Qt工程

拷贝 Redist 下内容到 编译的exe所在目录


#include <stdlib.h>
#include <iostream>
#include <conio.h>
#include <string>
#include "OpenNI.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"#define RESOLUTION 640,480
#define RECORDRESOLUTION 590,440
#define ADRESOLUTION 45,40,590,440
#define FPS 20
#define GRAYTH 10
#define REPAIRERANGE 5
#define COLORTH 10using namespace std;
using namespace cv;
using namespace openni;//Openni status
Status result = STATUS_OK;
//open device
Device device;
//OpenNI2 image
VideoFrameRef oniDepthImg;
VideoFrameRef oniColorImg;
//create stream
VideoStream oniDepthStream;
VideoStream oniColorStream;
//set video mode
VideoMode modeDepth;
VideoMode modeColor;
//OpenCV image
cv::Mat cvDepthImg;
cv::Mat cvDepthImg2;
cv::Mat cvColorImg;
cv::Mat cvColorImg2;
//OpenCV adjusted image
cv::Mat cvAdjustDepthImg;
cv::Mat cvAdjustColorImg;
//Resolution
Size se=Size(RESOLUTION);
Size recordse=Size(RECORDRESOLUTION);void CheckOpenNIError( Status result, string status )
{if( result != STATUS_OK )cerr << status << " Error: " << OpenNI::getExtendedError() << endl;
}
void iniOpenNI(void );
void releaseResource(void );
void RemoveNoiseRecord(void );
void RemoveNoise(void );
bool pixelRepaire(int ,int ,int );
bool rangeRepaire(int ,int ,int );int main( int argc, char** argv )
{iniOpenNI();RemoveNoiseRecord();releaseResource();return 0;
}void iniOpenNI()
{// initialize OpenNI2result = OpenNI::initialize();CheckOpenNIError( result, "initialize context" );//open video deviceresult = device.open( openni::ANY_DEVICE );CheckOpenNIError( result, "initialize context" );//creat depth streamresult = oniDepthStream.create( device, openni::SENSOR_DEPTH );CheckOpenNIError( result, "initialize context" );//set depth modemodeDepth.setResolution( RESOLUTION );modeDepth.setFps( FPS );modeDepth.setPixelFormat( PIXEL_FORMAT_DEPTH_1_MM );oniDepthStream.setVideoMode(modeDepth);// start depth streamresult = oniDepthStream.start();CheckOpenNIError( result, "initialize context" );// create color streamresult = oniColorStream.create( device, openni::SENSOR_COLOR );CheckOpenNIError( result, "initialize context" );// set color video modemodeColor.setResolution( RESOLUTION );modeColor.setFps( FPS );modeColor.setPixelFormat( PIXEL_FORMAT_RGB888 );oniColorStream.setVideoMode( modeColor);// start color streamresult = oniColorStream.start();CheckOpenNIError( result, "initialize context" );// set depth and color imge registration modeif( device.isImageRegistrationModeSupported(IMAGE_REGISTRATION_DEPTH_TO_COLOR ) ){cout << "support" << endl;device.setImageRegistrationMode( IMAGE_REGISTRATION_DEPTH_TO_COLOR );}}void releaseResource()
{//OpenNI2 destroyoniDepthStream.destroy();oniColorStream.destroy();device.close();OpenNI::shutdown();
}void RemoveNoiseRecord()
{std::cout<<"\t\t\t------RemoveNoiseRecord-------"<<std::endl;char *DepthFilename = "oringindepthvideo.avi";char *ColorFilename = "oringincolorvideo.avi";char *removeDepthFilename = "removedepthvideo.avi";char *removeColorFilename = "removecolorvideo.avi";VideoWriter removecolorVideoWriter=VideoWriter(removeColorFilename,CV_FOURCC('X','V','I','D'),FPS,recordse);VideoWriter removedepthVideoWriter=VideoWriter(removeDepthFilename,CV_FOURCC('X','V','I','D'),FPS,recordse);VideoWriter colorVideoWriter=VideoWriter(ColorFilename,CV_FOURCC('X','V','I','D'),FPS,recordse);VideoWriter depthVideoWriter=VideoWriter(DepthFilename,CV_FOURCC('X','V','I','D'),FPS,recordse);//    VideoWriter colorVideoWriter=VideoWriter(ColorFilename,CV_FOURCC('X','V','I','D'),FPS,se);//    VideoWriter depthVideoWriter=VideoWriter(DepthFilename,CV_FOURCC('X','V','I','D'),FPS,se);namedWindow("after-gray",1);namedWindow("after-depth",1);namedWindow("befor-color",1);namedWindow("befor-depth",1);while(true){if( oniColorStream.readFrame( &oniColorImg ) == STATUS_OK ){// convert data into OpenCV typecv::Mat cvRGBImg( oniColorImg.getHeight(), oniColorImg.getWidth(), CV_8UC3, (void*)oniColorImg.getData() );cv::cvtColor( cvRGBImg, cvColorImg2, CV_RGB2BGR );cvColorImg2=Mat(cvColorImg2,Rect(ADRESOLUTION));colorVideoWriter.write(cvColorImg2);cv::imshow("befor-color", cvColorImg2 );cvtColor(cvRGBImg,cvColorImg,CV_RGB2GRAY);//colorVideoWriter.write(cvColorImg);}if( oniDepthStream.readFrame( &oniDepthImg ) == STATUS_OK ){cv::Mat cvRawImg16U( oniDepthImg.getHeight(), oniDepthImg.getWidth(), CV_16UC1, (void*)oniDepthImg.getData() );cvRawImg16U.convertTo( cvDepthImg, CV_8UC1, 255.0/(oniDepthStream.getMaxPixelValue()));cv::cvtColor(cvDepthImg,cvDepthImg2,CV_GRAY2BGR);cvDepthImg2=Mat(cvDepthImg2,Rect(ADRESOLUTION));depthVideoWriter.write(cvDepthImg2);cv::imshow( "befor-depth", cvDepthImg2 );}cvAdjustDepthImg=Mat(cvDepthImg,Rect(ADRESOLUTION));cvAdjustColorImg=Mat(cvColorImg,Rect(ADRESOLUTION));RemoveNoise();cvtColor(cvAdjustColorImg,cvAdjustColorImg,CV_GRAY2BGR);cvtColor(cvAdjustDepthImg,cvAdjustDepthImg,CV_GRAY2BGR);removecolorVideoWriter.write(cvAdjustColorImg);removedepthVideoWriter.write(cvAdjustDepthImg);std::cout<<"removecolorVideoWriter"<<std::endl;std::cout<<"\tremovedepthVideoWriter"<<std::endl;imshow("after-gray",cvAdjustColorImg);imshow("after-depth",cvAdjustDepthImg);int key;key=waitKey(10);if(key==27){break;}}removecolorVideoWriter.release ();removedepthVideoWriter.release ();colorVideoWriter.release ();depthVideoWriter.release ();destroyWindow("after-gray");destroyWindow("after-depth");destroyWindow("befor-color");destroyWindow("befor-depth");
}void RemoveNoise()
{clock_t start,finish;double totaltime=0.0;start=clock();for(int j=(cvAdjustDepthImg.rows-1);j>=0;j--)//depthImage.rows{const uchar* mj=cvAdjustDepthImg.ptr<uchar>(j);for(int i=(cvAdjustDepthImg.cols-1);i>=0;i--)//depthImage.cols{if(mj[i]<=GRAYTH){uchar colorpixel=cvAdjustColorImg.at<uchar>(j,i);bool reResult=false;if(colorpixel<GRAYTH*5){for(int k=1;k<REPAIRERANGE*3;k++){reResult=pixelRepaire(i,j,k);if(reResult)break;}//go downif(!reResult){for(int k=1;k<=30;k++){if((j+k)<440){if(cvAdjustDepthImg.at<uchar>(j+k,i)>GRAYTH){cvAdjustDepthImg.at<uchar>(j,i)=cvAdjustDepthImg.at<uchar>(j+k,i);reResult=true;break;}}else{break;}}}//go upif(!reResult){for(int k=1;k<=30;k++){if((j-k)>=0){if(cvAdjustDepthImg.at<uchar>(j-k,i)>GRAYTH){cvAdjustDepthImg.at<uchar>(j,i)=cvAdjustDepthImg.at<uchar>(j-k,i);reResult=true;break;}}else{break;}}}}else{for(int k=1;k<30;k++){if((i+k)<590 && !reResult){if(abs(cvAdjustColorImg.at<uchar>(j,i+k)-colorpixel)<=COLORTH && cvAdjustDepthImg.at<uchar>(j,i+k)>GRAYTH){cvAdjustDepthImg.at<uchar>(j,i)=cvAdjustDepthImg.at<uchar>(j,i+k);reResult=true;}}else{break;}}}if(!reResult){for(int k=1;k<REPAIRERANGE;k++){reResult=pixelRepaire(i,j,k);if(reResult)break;}}if(!reResult){for(int k=0;k<REPAIRERANGE*3;k++){reResult=rangeRepaire(i,j,k);if(reResult)break;}}}}}finish=clock();totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
}bool pixelRepaire(int i,int j,int repaireRange)
{uchar colorpixel=cvAdjustColorImg.at<uchar>(j,i);int x=0;int y=0;int n=0;int sum=0;for(y=j-repaireRange;y<=j+repaireRange;y++){if(y>=0 && y<440){if(y==(j-repaireRange) ||  y==(j+repaireRange)){for(x=i-repaireRange;x<=i+repaireRange;x++){if(x>=0 && x<590){if(abs(cvAdjustColorImg.at<uchar>(y,x)-colorpixel)<=COLORTH && cvAdjustDepthImg.at<uchar>(y,x)>GRAYTH){n++;sum=sum+cvAdjustDepthImg.at<uchar>(y,x);}}}}else{x=i-repaireRange;if(x>=0 && x<590){if(abs(cvAdjustColorImg.at<uchar>(y,x)-colorpixel)<=COLORTH && cvAdjustDepthImg.at<uchar>(y,x)>GRAYTH){n++;sum=sum+cvAdjustDepthImg.at<uchar>(y,x);}}x=i+repaireRange;if(x>=0 && x<590){if(abs(cvAdjustColorImg.at<uchar>(y,x)-colorpixel)<=COLORTH && cvAdjustDepthImg.at<uchar>(y,x)>GRAYTH){n++;sum=sum+cvAdjustDepthImg.at<uchar>(y,x);}}}}}if(n<repaireRange*2){return false;}else{cvAdjustDepthImg.at<uchar>(j,i)=(uchar)(sum/n);return true;}}bool rangeRepaire(int i,int j,int repaireRange)
{uchar colorpixel=cvAdjustColorImg.at<uchar>(j,i);int x=0;int y=0;int n=0;int sum=0;for(y=j-repaireRange;y<=j+repaireRange;y++){if(y>=0 && y<440){for(x=i-repaireRange;x<=i+repaireRange;x++){if(x>=0 && x<590){if(cvAdjustDepthImg.at<uchar>(y,x)>GRAYTH){n++;sum=sum+cvAdjustDepthImg.at<uchar>(y,x);}}}}}if(n<=repaireRange*2){return false;}else{cvAdjustDepthImg.at<uchar>(j,i)=(uchar)(sum/n);return true;}
}

source code

http://git.oschina.net/yuliyang/kinectRecorder

转载于:https://www.cnblogs.com/yuliyang/p/4663909.html

kinect 录制彩色和深度视频相关推荐

  1. Kinect开发学习笔记之(八)彩色、深度、骨骼和用户抠图结合

    Kinect开发学习笔记之(八)彩色.深度.骨骼和用户抠图结合 zouxy09@qq.com http://blog.csdn.net/zouxy09 我的Kinect开发平台是: Win7 x86 ...

  2. Kinect SDK(1):读取彩色、深度、骨骼信息并用OpenCV显示

    转自:http://www.sjsjw.com/kf_other/article/41_23129_23822.asp Kinect SDK 读取彩色.深度.骨骼信息并用OpenCV显示 一.原理说明 ...

  3. Kinect学习(七):综合提取彩色、深度、人体骨骼点

    前言 前面的博客中介绍了如何通过Kinect获得彩色图像.深度图像以及人体骨骼点: Kinect学习(三):获取RGB颜色数据 Kinect学习(四):提取深度数据 Kinect学习(五):提取带用户 ...

  4. 人物肖像速写_深度视频肖像

    人物肖像速写 Synthesizing and editing video portraits-i.e., videos framed to show a person's head and uppe ...

  5. 如何录屏有声音?如何录制带声音的视频

    平常我们会通过录屏的方式录制电脑画面,然后再保存下来.那您是不是遇到过这种情况:录制的录屏文件只有画面没有声音.没有声音的视频还能修复吗?如何录屏有声音?怎样才能录制带声音的视频? 今天小编教大家如何 ...

  6. ROS中使用乐视 奥比中光(Astra Pro)深度相机显示彩色和深度图像

    环境 Ubuntu ROS Kinect or Melodic 奥比中光ROS驱动包安装地址:https://github.com/orbbec/ros_astra_camera 1.安装ROS 2. ...

  7. 北京大学孙俊教授课题组深度视频研究室招收2021级博士生

    PaperWeekly 致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁.如果你需要我们帮助你发布实习或全职岗位,请添加微信号「pwbot02」. 课题组简介 深度视 ...

  8. 录屏可以录声音吗?录制带声音的视频,这个方法轻松解决

    ​很多小伙伴对电脑屏幕进行录制的时候,却发现自己辛苦录制的视频没有录到声音.录屏可以录声音吗?当然可以!只需要使用录屏软件进行录制就可以解决.还不知道录屏可以录声音的小伙伴快来看看吧. 一.录屏可以录 ...

  9. 怎么录制明日之后游戏视频

    明日之后是最近比较火的一款手游,身边许多的小伙伴都开始玩起了这个游戏,有的玩不错的小伙伴,甚至都录起了游戏解说视频,那么怎么录制明日之后游戏视频呢?其实很简单下面小编便来分享具体的录制步骤. 准备工作 ...

最新文章

  1. jdk8中流的使用(二)
  2. FaaS — Serverless Computing(无服务器计算)
  3. 网络推广外包——网络推广外包专员面对外链发布更注重细节
  4. oracle 整个表空间迁移,ORACLE表批量迁移表空间
  5. 三星会使用华为的鸿蒙系统,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  6. matlab人工势场法三维演示图,运动规划入门 | 5. 白话人工势场法,从原理到Matlab实现...
  7. java 管道流PipedInputStream,PipedInputStream和随机访问文件 RandomAccessFile
  8. Java中矩阵运算(math3的使用)
  9. [Objective-c 基础 - 2.5] .h和.m文件,点语法,成员变量作用域
  10. UVA10679 I Love Strings!!【字符串匹配】
  11. 数组(有序数组)的公共部分
  12. python实习生面试题_【实习】暑期实习之python笔试题(一)
  13. Android APK系列6-------APK反编译
  14. 1114 Family Property (25 point(s)) PAT甲级
  15. 计算机原理--全加器
  16. 阿里云ODPS升级为一体化大数据平台 满足用户多元化数据计算需求
  17. DNS中的A记录和CNAME记录的区别
  18. Linux:root下的文件-anaconda-ks.cfg详解
  19. 彩色图像高频与低频成分的分解
  20. 数据结构精录总结Episode.6 数据结构入门之树(基于Visual C++)

热门文章

  1. angular 应为声明或语句_“允许”员工自愿降薪后,多益网络再发声:声明降薪非自愿者奖 3 万...
  2. AI嵌入式开发:NVIDIA Jetson Xavier NX刷机(2)
  3. 中国碳纤维风电叶片行业“十四五”发展规划及投资可行性分析报告2022-2028年版
  4. python程序基础书写文本_Python基础手册4——文本结构
  5. 世界种业并购史 国际农民丰收节贸易会起底农化巨头构架
  6. 中科微研携手-农业大健康·李喜贵:从玉农业谋定功能性农业
  7. java与js交互,相互调用传参
  8. class类文件结构
  9. 位运算,处理前台多选值
  10. 读书笔记-JavaScript高级程序设计(1)