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

来源:互联网 发布:强制删除软件下载 编辑:程序博客网 时间:2024/06/07 20:08

一、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 处理前后视频对比


2.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   坐标点的小数点位数。





0 0
原创粉丝点击