(一)opencv 视屏读写

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




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值