opencv kinect彩色视频转化为avi

因为实验室项目要求,拍摄一些视频进行机器学习。视频只要是普通的彩色视频就可以了,可老师非得用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;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值