logo资料库

基于Kinect2.0的视频采集程序代码.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
// ConsoleApplication15.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include "pch.h" #include #include #include #include #include #include "videoGet\videoprocessor.h" using namespace std; using namespace cv; int main(void) { IKinectSensor * mySensor = nullptr; GetDefaultKinectSensor(&mySensor); //获取感应器 mySensor->Open(); //打开感应器 double time0 = static_cast(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(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();
分享到:
收藏