当前位置: 代码迷 >> 综合 >> (一)opencv 视屏读写
  详细解决方案

(一)opencv 视屏读写

热度:43   发布时间:2023-11-17 04:10:23.0

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