opencv3 学习笔记 图像与视频的转换
2017-05-01 13:59
483 查看
刚开始接触opencv3,发现函数的用法太多,本身C++学的也不是很好,打算随手把学过的记录下来,方便以后查看
1.读取图像:Mat imread(const string& filename, int flags);
返回值为Mat对象
Mat类型需要记录图像的数据:
1).图像是灰度或彩色(这里姑且只考虑这两种)
2).图像数据的大小(图像的宽与高)
3).一个数据体:二维数组或是一维数组。
●Mat类:是用于保存图像以及其他矩阵数据的数据结构。默认情况下,其 尺寸为0,也可以指定初始尺寸,比如定义一个Mat类对象,就要写cv::Mat pic(320,640,cv::Scalar(100));
2.显示图像:void imshow(const string& winname, InputArray mat);
第一个参数,const string&类型的winname,填需要显示的窗口标识名称。
3.将输出图像保存为文件:
bool imwrite(const string& filename,InputArray img, const vector& params=vector() );
第一个参数:保存后的文件名
第二个参数:要保存的Mat类型的图像数据
第三个参数:特定格式保存的参数编码,它有默认值vector(),所以一般情况下不需要填写
4**.截取图像中的一部分:Reat类 Reat rect(a,b,c,d);**
a,b 表示截取图片的左上角在原图的坐标。
c,d分别代表图片的长宽。
下面的代码是练习代码
5 VideoCapture 类 视频读取
VideoCapture::VideoCapture (const string& filename/int device)
filename/device:打开的视频文件/设备ID
方法:
1.isOpende():判断视频或摄像头调用是否成功
2.read(Mat frame) / capture >> frame :捕获、解码和返回下一个视频帧
3.get(int id):获取视频属性,如帧率、总帧数、尺寸等
4.set(int id,double value):设置视频属性
5.VideoWriter类 视频写操作
cv::VideoWriter out( const string& filename, // 输入文件名 int fourcc, // 编码形式,使用 CV_FOURCC()宏 double fps, // 输出视频帧率 cv::Size frame_size, // 单帧图片的大小 bool is_color = true // 如果是false,可传入灰度图像 ); cv::VideoWriter out; out.open( "my_video.mpg", //输出文件名 CV_FOURCC('D','I','V','X'), // MPEG-4 编码 30.0, // 帧率 (FPS) cv::Size( 640, 480 ), // 单帧图片分辨率为 640x480 true // 只输入彩色图 );
写入图像方法:
cv::VideoWriter::write( const Mat& image // 写入图像作为下一帧 ); my_video_writer << my_frame;
///////////////////////////////////// // 隔一分钟保存一帧 // // 将连续帧保存为视频 // //////////////////////////////////// #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int video_picture(string filename); void Image_To_Video(int m); int main() { string video_name = "D://Libs//opencv310//opencv//sources//samples//data//768x576.avi"; int n; n = video_picture(video_name); //截取帧 Image_To_Video(n); //图像整合成视频 return(0); } int video_picture(string filename) { int i = 0; int j = 0; //读入视频 VideoCapture capture(filename); double rate = capture.get(CV_CAP_PROP_FPS); //获取视频帧率 //循环读取每一帧 while (1){ Mat frame; //Mat:存储每一帧的图像 capture >> frame; //读取当前帧 i++; if (i == 6*rate){ //10fps/s 1min->600fps i = 0; j++; //imshow("读取视频", frame); //显示当前帧 string name_1 = "D://video picture//"; string name_2 = to_string(j); string name_3 = ".jpg"; name_1 += name_2; name_1 += name_3; //图片存储路径及名字 if (!frame.empty()){ imwrite(name_1, frame);//截取当前帧并以图像的形式保存 waitKey(30); //延时30ms } if (frame.empty()) break; } } return j; } void Image_To_Video(int p_num) { char image_name[40]; string s_image_name; //初始化视频编写器 cv::VideoWriter writer; int isColor = 1; //true int frame_fps = 10; int frame_width = 768; int frame_height = 576; using namespace cv; string video_name = "D://video picture//hehe.avi"; //视频名字及路径 writer = VideoWriter(video_name, CV_FOURCC('X', 'V', 'I', 'D'), frame_fps, Size(frame_width, frame_height), isColor); cv::namedWindow("image to video", CV_WINDOW_AUTOSIZE); int i = 1; Mat img; while (i <= p_num) { sprintf(image_name, "%s%d%s", "D://video picture//", i++, ".jpg"); s_image_name = image_name; img = imread(s_image_name);//读入图片 if (!img.data) //判断图片调入是否成功 { cout << "Could not load image file...\n" << endl; } if (!img.empty()) //非空判断 imshow("image to video", img); //写入 writer.write(img); if (cv::waitKey(30) == 27 || i == 56) //ESC:ASCⅡ码27 { cout << "按下ESC键" << endl; break; } } }
相关文章推荐
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- opencv学习笔记-2,图像颜色空间转换
- C# OpenCV学习笔记三之图像捕捉及其灰度转换方法
- 【OpenCV学习笔记】3.1 RGB图像转换为HSI图像
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- OpenCV学习笔记之图像视频显示
- OpenCV学习笔记01--图像和视频的显示
- OpenCV学习笔记二:灰色图像转换成彩色图像 非CV_GRAY2RGB
- python3.6.3+opencv3.3.0学习笔记六--存储视频和图像
- opencv学习笔记(八)彩色视频转换成黑白视频
- opencv [c++版] 学习笔记(1) 显示图像及播放视频
- OpenCV学习笔记02--利用滚动条控制视频;高斯滤波处理图像。
- Opencv学习笔记(1)_MAT图像与HBITMAP互相转换
- OpenCV学习笔记 利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面 .
- opencv视频学习第三课(显示图像)笔记整理
- OpenCV学习笔记-显示图像
- OpenCV学习笔记-图像分割
- OpenCV学习笔记-读取视频文件
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- OpenCV学习笔记(二十九)——视频前景的提取Video