OPENCV 读取视频文件 & 保存视频文件(VideoCapture)

一、VideoCapture 类


主要是用来 读取本地视频 读取摄像头

1、读取本地视频

VideoCapture cap(path);

**其中 path 是视频文件的路径

2、读取摄像头

VideoCapture cap(0);

**其中 0是是摄像头的 index ,如有多个摄像头则 +1 ,如 0,1, 2, 3...

二、读取视频文件 


测试代码

#include 
#include 

// 主函数
int main(int argc, char* argv[])
{
	double width  = 0;            
	double height = 0;
	double fps    = 0;
	cv::Mat frame;
	cv::String WIN_NAME = "Camera";
	cv::VideoCapture cap; 

	if (!cap.open("./image/1.mp4"))  // 打开 1.mp4 视频文件
		return -1;
	
	cap >> frame;
	width  = cap.get(cv::CAP_PROP_FRAME_WIDTH);  // 获取摄像头图像的宽
	height = cap.get(cv::CAP_PROP_FRAME_HEIGHT); // 获取摄像头图像的高
	fps    = cap.get(cv::CAP_PROP_FPS);

	std::cout << "widht =" << width  << std::endl;
	std::cout << "heigt =" << height << std::endl;
	std::cout << "pfs ="   << fps << std::endl;

	cv::namedWindow(WIN_NAME);   // 创建一个名为 Camera 的窗口

	// 循环读取视频文件
	for (;;) {		
		cap >> frame;  // 获取视频文件图像

		if (frame.empty()) 
			break;

		cv::imshow(WIN_NAME, frame); // 显示视频文件图像

		if (cv::waitKey(1000/(int)fps) == 27) // 按下键盘的 Esc 退出
			break;
	}

	cv::destroyAllWindows();  // 清理资源
	return 0;
}

OPENCV 读取视频文件 & 保存视频文件(VideoCapture)_第1张图片

 

三、保存视频文件


测试代码

#include 

// 主函数
int main(int argc, char* argv[])
{
	cv::Mat frame;
	cv::String WIN_NAME = "Camera";
	cv::VideoCapture cap; 

	if (!cap.open("./image/1.mp4"))  // 打开 1.mp4 视频文件
		return -1;
	
	// 获取一帧图像
	cap >> frame;
	if (frame.empty()) 
		return -1;

	// 保存视频文件的参数
	cv::VideoWriter frame_write;
	bool isColor = (frame.type() == CV_8UC3); // 灰度 or 彩色图像
	cv::String save_name = "./image/1.avi";   // 保存的文件名
	int codec = cv::VideoWriter::fourcc('M', 'J', 'P', 'G'); // 获取编码器
	double fps = cap.get(cv::CAP_PROP_FPS);   // fps
	frame_write.open(save_name, codec, fps, frame.size(), isColor); // 创建保存视频文件视频流

	// 创建的视频文件是否被打开
	if (!frame_write.isOpened()) 
		return -1;	

	cv::namedWindow(WIN_NAME);   // 创建一个名为 Camera 的窗口

	// 循环读取视频文件
	for (;;) {		
		cap >> frame;  // 获取视频文件图像

		if (frame.empty()) 
			break;

		frame_write.write(frame); // 写入视频文件

		cv::imshow(WIN_NAME, frame); // 显示视频文件图像

		if (cv::waitKey(1000/(int)fps) == 27) // 按下键盘的 Esc 退出
			break;
	}

	cap.release();
	frame_write.release();
	cv::destroyAllWindows();  // 清理资源
	return 0;
}

OPENCV 读取视频文件 & 保存视频文件(VideoCapture)_第2张图片

四、_End


你可能感兴趣的:(opencv,opencv,人工智能,计算机视觉)