本文主要是写了关于opencv视屏读写的操作
1.第一段代码是写了一个从左上角到右下角1-100不断变换的视屏,最后进行保存
2.第二段代码是写了一个从电脑摄像头读取视屏并保存的视屏
3.第三段代码是两者的综合
下面是具体的代码
//视屏绘制图像
#include <stdio.h>
#include <iostream>
#include "opencv2/opencv.hpp" using namespace std;
using namespace cv;int main(int argc, char** argv)
{ //定义视频的宽度和高度 Size s(320, 240); //创建 writer,并指定 压缩格式 及 FPS 等参数 VideoWriter writer = VideoWriter("myvideo.avi",-1, 25, s);//【名称、压缩格式(这里手动选择)、帧率、视屏长宽(分辨率)】特别说明倒数第三个必须为 -1 否则会报错//检查是否成功创建 if(!writer.isOpened()) { cerr << "Can not create video file.\n" << endl; return -1; } //视频帧 Mat frame(s, CV_8UC3); for (int i = 0; i < 100; i++) { //将图像置为黑色 frame = Scalar::all(255); //将整数 i 转为 i 字符串类型 char text[128]; snprintf(text, sizeof(text), "%d", i); //将数字绘到画面上 putText(frame, text, Point(s.width*i/100, s.height*i/100), FONT_HERSHEY_SCRIPT_SIMPLEX, 3, Scalar(0,0,255), 3, 8); //【图片、文字、文本框左下角、字体、字体大小、颜色、宽度、线型】 //将图像写入视频 writer << frame; } //退出程序时会自动关闭视频文件 return 0;
} //调用摄像头写视屏#include <stdio.h>
#include <iostream>
#include "opencv2/opencv.hpp" using namespace std;
using namespace cv;int main(int argc, char** argv)
{ //定义视频的宽度和高度 Size s(320, 240); //创建 writer,并指定 压缩格式 及 FPS 等参数 VideoCapture video(0);//VideoCapture cap("video.short.raw.avi"); //打开指定视屏Mat frame;Size videoSize(1280, 960);VideoWriter writer("myvideo.avi", -1, 25, Size(frame.cols, frame.rows));//【名称、压缩格式(这里手动选择)、帧率、视屏长宽(分辨率)】特别说明倒数第三个必须为 -1 否则会报错//检查是否成功创建 while(video.isOpened()){video >> frame;writer << frame; imshow("video", frame); if (waitKey(20) == 27)//27是键盘摁下esc时,计算机接收到的ascii码值 {break;}} //退出程序时会自动关闭视频文件 return 0;
} //二者综合#include <stdio.h>
#include <iostream>
#include "opencv2/opencv.hpp" using namespace std;
using namespace cv;int main(int argc, char** argv)
{ //定义视频的宽度和高度 //创建 writer,并指定 压缩格式 及 FPS 等参数 VideoCapture video(0);int w = static_cast<int>(video.get(CAP_PROP_FRAME_WIDTH));//获取图像宽度int h = static_cast<int>(video.get(CAP_PROP_FRAME_HEIGHT));//获取图像高度Size S(w, h);Mat frame;Size videoSize(1280, 960);VideoWriter writer("myvideo.avi", -1, 25, Size(frame.cols, frame.rows));//【名称、压缩格式(这里手动选择)、帧率、视屏长宽(分辨率)】特别说明倒数第三个必须为 -1 否则会报错//检查是否成功创建 int i = 1;while (video.isOpened()){if (i++ > 100) i = 1;video >> frame;char text[128];snprintf(text, sizeof(text), "%d", i);//将数字绘到画面上 putText(frame, text, Point(S.width*i / 100, S.height*i / 100), FONT_HERSHEY_SCRIPT_SIMPLEX, 3,Scalar(0, 0, 255), 3, 8); //【图片、文字、文本框左下角、字体、字体大小、颜色、宽度、线型】 //将图像写入视频 writer << frame;imshow("video", frame);if (waitKey(20) == 27)//27是键盘摁下esc时,计算机接收到的ascii码值 {break;}}//退出程序时会自动关闭视频文件 return 0;
}//putText 参数解释
CV_EXPORTS_W void putText( InputOutputArray img, //待绘制文字的图像const String& text,//待绘制的文字Point org,//文本框左下角int fontFace,//字体double fontScale, //字体大小Scalar color,//字体颜色 FONT_HERSHEY_SCRIPT_SIMPLEX(red)int thickness = 1,//字体宽度int lineType = LINE_8, //线性,4/8邻阈bool bottomLeftOrigin = false);