本文主要是写了关于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
);