opencv视频读取与帧处理后保存为视频的方法

一、opencv的视频读取与保存

具体代码及解释如下:

#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, char *argv[])
{
	Point pt1,pt2;
	Mat current;
	cv::VideoCapture capture("F:\\tracking\\test.avi");//关联读入视频文件
	if (!capture.isOpened()){
		std::cout << "fail to load video";
		return 1;
	}
	/*获取视频fps*/
	double rate = capture.get(CV_CAP_PROP_FPS);
	/*获取视频帧的尺寸*/
	int width = capture.get(CV_CAP_PROP_FRAME_WIDTH);
	int height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);
	/*根据打开视频的参数初始化输出视频格式*/
	cv::VideoWriter w_cap("re_video.avi", CV_FOURCC('M', 'J', 'P', 'G'), rate, cv::Size(width, height));
	/*自定义输出视频的尺寸,需要将读取的视频帧尺寸进行变换,下文使用的resize函数完成*/
	//cv::VideoWriter w_cap("re_video.avi", CV_FOURCC('M', 'J', 'P', 'G'), rate, cv::Size(your.width, your.height));

	/*循环读取视频的帧*/
	while (capture.read(current)){
		/*前面使用的是自定义输出视频尺寸时,使用resize函数*/
		//resize(current, current, cv::Size(your.width, your.height));
		/*对读取的视频帧进行处理*/
		pt1.x= 40;
		pt1.y = 40;
		pt2.x= 100;
		pt2.y = 100;
		rectangle(current, pt1, pt2, Scalar(0,0,255),2,8,0);//用矩形画矩形窗 
		/*保存处理后的帧为视频*/
		w_cap.write(current);
		imshow("src", current);
		waitKey(1);
	}
	return 0;
}

二、结果展示

2.1 处理前后视频对比

opencv视频读取与帧处理后保存为视频的方法_第1张图片

2.2 自定义输出视频尺寸

opencv视频读取与帧处理后保存为视频的方法_第2张图片

三、rectangle函数详解

rectangle有两种重载形式,分别如下:

void rectangle(CV_IN_OUT Mat& img, Point pt1, Point pt2,
                          const Scalar& color, int thickness=1,
                          int lineType=8, int shift=0);
void rectangle(CV_IN_OUT Mat& img, Rect rec,
                          const Scalar& color, int thickness=1,
                          int lineType=8, int shift=0);
其区别为一个使用个点的坐标来绘制矩形,另一个使用Rect结构体来绘制矩形。

其参数的意义分别为:

img    图像数据
pt1     矩形的一个顶点。
pt2     矩形对角线上的另一个顶点
color    线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。
thickness   组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。
lineType  线条的类型。见cvLine的描述
shift   坐标点的小数点位数。





你可能感兴趣的:(DSP与图像处理)