C++Opencv实时读取摄像头视频保存指定帧图片
空格截图到指定文档
string writePath = "../temp/";
int main(int argc, char** argv){VideoCapture capture(0);string name;namedWindow("hello", CV_WINDOW_AUTOSIZE);int i=0;while (1) {Mat frame;capture >> frame;if (32 == waitKey(20)) { //空格拍照name = writePath + "i"+".jpg";imwrite(name, frame);cout << name << endl;i++;}if (97 == waitKey(10)) { //'a'退出break;}imshow("hello",frame);}//waitKey(0);
}
按时间间隔截图到指定文档
可以自己加一个条件来执行:
if(frameNUM % 10 == 0){strcpy_s(cur_fn,"");sprintf_s(cur_fn,"%s%d%s",outDir,frameNUM,imgExt);cvSaveImage(cur_fn,pImg,NULL);}
#include <stdio.h>
#include<opencv2/opencv.hpp>
#include<iostream>
#include<direct.h>
#include<io.h>
#include<string>using namespace std;
using namespace cv;int recursive_mkdir(char* dir);//recursive:递归,mkdir:DOS命令,建立一个新的子目录,dir:是directory目录的缩写
int VideoToImage( CvCapture* capture,char* outdir,char* imgext,int nowFrameNum);//视频转化为图片序列,nowFrameNum为当前帧数int main(int argc, char** argv)
{char* outDir1="D:\\EZ\\Image\\";VideoCapture cap(0);cap.set(CV_CAP_PROP_FRAME_WIDTH, 1920);//宽度cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);//高度CvCapture* capture = cvCaptureFromCAM(0);if (!cap.isOpened()) // 检查打开是否成功return -1;double rate=cap.get(CV_CAP_PROP_FPS);//取得帧速率int delay=1000/rate;//根据帧速率计算帧之间的等待时间bool stop (false);Mat frame;//当前视频帧namedWindow("Extracted Frame");int nowFrameNum=0;while (!stop){if (!cap.read(frame))break;waitKey(1000);// 延时30msimshow("Extracted Frame",frame);nowFrameNum++; //统计帧数int images=VideoToImage(capture,outDir1,".jpg",nowFrameNum);}return 0;}//将视频转换为图片序列 返回由视频分解得到的图片总帧数 目前OpenCV只支持AVI格式 因此使用之前需要//将视频转化问AVI格式int VideoToImage(CvCapture* capture,char* outDir,char* imgExt,int nowFrameNum){CvCapture *cap= cvCaptureFromCAM(0);if (cap==NULL){return 0;}//保存图片的文件夹路径一定要有,因为OpenCV不会自动创建文件夹//int _access(const char* Filename,int Access_Mode) 参数Filename 是访问文件所在的路径名,mode是访问判断模式//返回0 表示文件在当前路径已存在,返回-1表示该文件在当前路径不存在if (_access(outDir,0)==-1){recursive_mkdir(outDir);std::cout<<"输出目录不存在,并已自主创建"<<std::endl;}char cur_fn[255];//保存当前帧所得图片的文件名 表示某张图片的绝对路径 IplImage* pImg=NULL;int frameNUM=0;//函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。while((pImg=cvQueryFrame(cap))!=NULL&&(frameNUM=nowFrameNum))//{ frameNUM++;nowFrameNum++;strcpy_s(cur_fn,"");//strcpy_s是系统的安全函数,strcpy_s是根据'\0'判断源字符串结束的,strcpy_s是以字节为单位的参数,它用来确认缓冲区大小sprintf_s(cur_fn,"%s%d%s",outDir,frameNUM,imgExt);//这里的设置适合形如 123.jpg 124.jpg的图片序列 sprintf_s将格式化字符串存到缓冲区cvSaveImage(cur_fn,pImg,NULL);}cvReleaseImage(&pImg);cvReleaseCapture(&cap);return frameNUM;}//该函数借鉴了网上资料,自动创建多级目录int recursive_mkdir( char *dir ){//分解路径名E:\\AA\\BB\\CC\\//std::string str = dir;int index = 0;int i = 0;while(1){//size_type由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度// find 函数 返回"\\" 在index 中的下标位置 std::string::size_type pos = str.find("\\",index);std::string str1;str1 = str.substr(0,pos);//str.substr(a,b)是从a开始截取b个字符。if( pos != -1 && i > 0 ){if (_access(str1.c_str(),0)==-1) // c_str():生成一个const char*指针,指向以空字符终止的数组.这个数组的数据是临时的{_mkdir(str1.c_str());}}if( pos==-1 ){break;}i ++;index = pos+1;}return 0;
}
C++Opencv实时读取摄像头视频保存指定帧图片相关推荐
- php视频生成指定帧图片,python3.5 cv2 获取视频特定帧生成jpg图片
假如文件夹有大量视频文件,需求目标是想从每个视频中提取一帧作为视频的一个封面图片,本文利用opencv-python模块实现需求.结合自己的工作,做一下简单的记录,原本想生成可传参数的exe文件,以方 ...
- opencv2读取摄像头并保存为视频
opencv2读取摄像头并保存为视频 #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui ...
- opencv-python读取摄像头视频流保存为视频
opencv-python读取摄像头视频流保存为视频文件 opencv-python version:4.4.0.46 代码如下: import cv2# 通过cv2中的类获取视频流操作对象cap c ...
- Qt+OpenCV读取摄像头视频、本地视频、网络视频流Demo
Qt+OpenCV读取摄像头视频.本地视频.网络视频流Demo
- OpenCv实时设置摄像头参数/获得摄像头参数值的方法论
OpenCv实时设置摄像头参数/获得摄像头参数值的方法论 一.提醒: 在开始,摄像机修改之旅之前,出于负责任的态度.我想我需要提醒以下三点: 一.一旦你修改了这些参数,你的摄像头就被改动了,这是永久的 ...
- opencv读取avi视频并抽取帧
opencv读取avi视频并抽取帧 #include "stdafx.h" #include <opencv2/opencv.hpp>using namespace s ...
- 基于ffmpeg+SDL 实时播放摄像头视频
基于ffmpeg+SDL 实时播放摄像头视频 基本流程 udp接收rtp数据流接收一帧数据后,转换为NAL单元送去解码 (这里特别说明一下,我本次用的接口是支持从连续数据流中自动分割出一个个NAL的, ...
- opencv+海康摄像头,实现每秒获取摄像头拍摄视频的一帧图片
转载请注明文章来源:https://blog.csdn.net/caf1234/article/details/97671140 一.实现笔记本和海康网络摄像头(型号:DS-2CD3T86FWDV2- ...
- python选取本地视频的指定帧制作延时摄影
通过cv2读取本地视频,获取视频的分辨率,然后读取视频的指定帧保存到新的本地视频中,制作成延时摄影视频. 通过cap.set(cv2.CAP_PROP_POS_FRAMES, keys_frame)语 ...
最新文章
- CentOS7添加中文输入法
- linux vim编辑器的用法
- vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分
- 吴恩达给 74 岁老父亲发证了!8 年完成 146 门课程!
- CDH预警配置QQ邮箱
- C++ chrono 库中的 steady_clock 、 system_clock、high_resolution_clock区别
- linux公社 java算法_Java快速排序算法
- .Net Core实现的文档数据库RavenDb
- md5sum/opensll md5
- oracle首先创建三个表,oracle一个创建用户、创建表空间、授权、建表的完整过程...
- 13 Zuul的配置
- List、Set、Map比较
- Linux系统编程之进程间通信
- android viewholder模式,Android ViewHolder模式
- CSS学习21:fixed(固定定位)
- 生物安全实验室送排风设计标准
- python搜索关键词的公众号文章标题和路径_微信文章关键词爬虫教程
- Your actions speak louder
- MyBatisPlus极速入门
- 为什么说汽车VIN码是汽车唯一的身份证