因为实验室项目要求,拍摄一些视频进行机器学习。视频只要是普通的彩色视频就可以了,可老师非得用kinect拍摄!!!!!导出来的视频仍然需要压缩!!!!拍出来的视频还不咋地
代码是从网上抄过来并组合的,如果有倒霉孩子和我一样要这样弄的话,应该方便很多了
#include <iostream>
// OpenCV 头文件
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
// Kinect for Windows SDK 头文件
#include <Kinect.h>
#include <windows.h>
using namespace std;
int main(void)
{
// 1a.获取感应器
IKinectSensor* pSensor = nullptr;
GetDefaultKinectSensor(&pSensor);
// 1b. 打开感应器
pSensor->Open();
// 2a. 取得深度数据
IColorFrameSource* pFrameSource = nullptr;
pSensor->get_ColorFrameSource(&pFrameSource);
// 2b. 取得深度数据的描述信息(宽、高)
int iWidth = 0;
int iHeight = 0;
IFrameDescription* pFrameDescription = nullptr;
pFrameSource->get_FrameDescription(&pFrameDescription);
pFrameDescription->get_Width(&iWidth);
pFrameDescription->get_Height(&iHeight);
pFrameDescription->Release();
pFrameDescription = nullptr;
// 建立图像矩阵,mColorImg用来存储8位4通道的图像数据
cv::Mat mColorImg(iHeight, iWidth, CV_8UC4);
cv::namedWindow("ColorImage");
// 3a. 打开深度数据阅读器
IColorFrameReader* pFrameReader = nullptr;
pFrameSource->OpenReader(&pFrameReader);
cv::Size frameSize(static_cast<int>(1920), static_cast<int>(1080));
cv::VideoWriter writer("D:\\kinect video\\VideoTest.avi", CV_FOURCC('P', 'I', 'M', '1'), 20, frameSize, true);
char c;
// 主循环
while (1)
{
// 4a. 取得最新数据
IColorFrame* pFrame = nullptr;
cv::Mat temp;
if (pFrameReader->AcquireLatestFrame(&pFrame) == S_OK)
{
// 4c. 把数据存入图像矩阵中并转换成BGRA格式
pFrame->CopyConvertedFrameDataToArray(iWidth * iHeight * 4, (BYTE*)mColorImg.data, ColorImageFormat_Bgra);
resize(mColorImg, temp, cv::Size(640, 480));//1920 1080 变为640 480
cv::imshow("ColorImage", temp);
// 4e. 释放变量pFrame
pFrame->Release();
}
cv::Mat end,t;
cvtColor(mColorImg,end,cv::COLOR_BGRA2BGR);//BGRA去掉alpha通道,变为BGR
writer << end;
Sleep(50);
c = cv::waitKey(1);
if (c == 'e')
{
writer.release();
cout << "jieshule" << endl;
break;
}
}
// 3b. 释放变量pFrameReader
pFrameReader->Release();
pFrameReader = nullptr;
// 2d.释放变量pFramesSource
pFrameSource->Release();
pFrameSource = nullptr;
// 1c.关闭感应器
pSensor->Close();
// 1d.释放感应器
pSensor->Release();
pSensor = nullptr;
return 0;
}