首页 > 学院 > 开发设计 > 正文

使用Kinect V2进行录制视频

2019-11-06 08:53:48
字体:
来源:转载
供稿:网友
使用Kinect 2.0 进行视频的录制代码。
#include <Kinect.h>#include <iostream>#include <opencv2/highgui/highgui.hpp>#include <opencv2/core/core.hpp>#include <string>#include "videoGet/videoPRocessor.h"using   namespace   std;using   namespace   cv;int main(void){	IKinectSensor   * mySensor = nullptr;	GetDefaultKinectSensor(&mySensor);  //获取感应器	mySensor->Open();           //打开感应器	double time0 = static_cast<double>(getTickCount());	IDepthFrameSource   * mySource = nullptr;   //取得深度数据	mySensor->get_DepthFrameSource(&mySource);	int height = 0, width = 0;	IFrameDescription   * myDescription = nullptr;  //取得深度数据的分辨率	mySource->get_FrameDescription(&myDescription);	myDescription->get_Height(&height);	myDescription->get_Width(&width);	myDescription->Release();	IDepthFrameReader   * myReader = nullptr;	mySource->OpenReader(&myReader);    //打开深度数据的Reader	IDepthFrame * myFrame = nullptr;	Mat temp(height, width, CV_16UC1);    //建立图像矩阵	Mat img(height, width, CV_8UC1);	IKinectSensor   * mySensor1 = nullptr;           //第1步打开Sensor	GetDefaultKinectSensor(&mySensor1);	mySensor1->Open();	IColorFrameSource   * mySource1 = nullptr;       //第2步获取Source	mySensor1->get_ColorFrameSource(&mySource1);	int     height1 = 0, width1 = 0;                  //取得宽和高等下用	IFrameDescription   * myDescription1 = nullptr;	mySource1->get_FrameDescription(&myDescription1);	myDescription1->get_Height(&height1);	myDescription1->get_Width(&width1);	IColorFrameReader   * myReader1 = nullptr;       //第3步打开Reader	mySource1->OpenReader(&myReader1);	Mat img1(height1, width1, CV_8UC4);	IColorFrame     * myFrame1 = nullptr;	double rate = 30;	std::cout << "Frame rate: " << rate << "fps" << std::endl;	int delay = 1000 / rate;	long long i = 0;	std::string b = "depth";	std::string ext = ".bmp";	std::string b1 = "color";		cv::VideoWriter write;	write.open("color.avi", CV_FOURCC('M', 'J', 'P', 'G'), 15.0, Size(512, 424));//	VideoProcessor processor;	while (1)	{//		double time0 = static_cast<double>(getTickCount());		//第4步获取Frame		if ((myReader->AcquireLatestFrame(&myFrame) == S_OK) && (myReader1->AcquireLatestFrame(&myFrame1) == S_OK))//通过Reader尝试获取最新的一帧深度数据,放入深度帧中,并判断是否成功获取		{									myFrame->CopyFrameDataToArray(height * width, (UINT16 *)temp.data); //先把数据存入16位的图像矩阵中			temp.convertTo(img, CV_8UC1, 255.0 / 4500);   //再把16位转换为8位			imshow("TEST", img);			UINT    size1 = 0;			myFrame1->CopyConvertedFrameDataToArray(width1 * height1 * 4, (BYTE *)img1.data, ColorImageFormat_Bgra);			imshow("TEST", img1);			std::string name(b);			std::ostringstream ss; ss << i; name += ss.str(); //i++;			name += ext;			std::cout << name << std::endl;			std::string name1(b1);			std::ostringstream ss1; ss1 << i; name1 += ss1.str(); i++;			name1 += ext;			std::cout << name1 << std::endl;//			cv::imwrite(name, img);			if (cv::waitKey(delay) >= 0)				return 0;			write << img1;			/*			VideoProcessor processor;			processor.setDelay(1000. / 30.0);			processor.setOutput("depth.avi", -1, 30);//			cv::Mat frame = img.clone();			processor.run();			*/			write.open("depth.avi", CV_FOURCC('M', 'J', 'P', 'G'), 30.0,Size(512,424));			//write.write(img);			write << img;			myFrame->Release();			myFrame1->Release();		}		else		{//			cout << "It cannot get a new  image!!!" << "/n" << endl;		}		if (waitKey(30) == VK_ESCAPE)			break;	}	myReader->Release();        //释放不用的变量并且关闭感应器	mySource->Release();	mySensor->Close();	mySensor->Release();
	myReader1->Release();        //释放不用的变量并且关闭感应器	mySource1->Release();	mySensor1->Close();	mySensor1->Release();return 0;}

上一篇:pandas.read_csv参数整理

下一篇:分组列表

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表