opencv学习 视频帧截取
来源:互联网 发布:网络教育机构 编辑:程序博客网 时间:2024/06/05 06:00
做视频检测的时候经常需要对视频进行图像截取,可以利用opencv进行简单的截图操作,但截取速率比较慢,适用于几千张左右的截图,熟悉matlab的请无视= =
代码如下:
#include <cstring> #include <opencv2\opencv.hpp>#include "cv.h"#include "highgui.h"using namespace std;int main(){ CvCapture *capture; capture = cvCreateFileCapture("C:\\Users\\Ruby\\Desktop\\source\\video\\7.wmv"); IplImage *frame; int n = 1, m = 1; char *cstr = new char[20]; //下面参数分别代表视频的高、宽、fps、帧总数 int frameH = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT); int frameW = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH); int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); int numFrames = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT); printf("\tvideo height : %d\n\tvideo width : %d\n\tfps : %d\n\tframe numbers : %d\n", frameH, frameW, fps, numFrames); while (m<=48950)//截取前48950帧 { frame = cvQueryFrame(capture); if (!frame) break; if (m % 20 == 0){//每20帧取一帧 sprintf(cstr, "%s%d%s", "imag7.", n++, ".jpg"); cvSaveImage(cstr, frame); if (cvWaitKey(33) >= 0) break; } m++; } return 0;}
注意项:
上一篇博客中使用的是Mat结构体,为Opencv2.0版本以来所使用的数据结构;IplImage*格式是Opencv1.0时代基于C语言接口而建立的图像存储格式,退出前忘记release的话会造成内存泄漏,用起来比较麻烦(本文随便试试。。)。而且2.0版本后许多函数名称和Matlab中的一样,如imread、imwrite、imshow等,较为方便。
具体知识请参考浅墨大大的博客
http://blog.csdn.net/column/details/opencv-tutorial.htmlOpencv提供一个函数cvCreateFileCapture(Capture* cap,int property_index)来获取视频文件的一些属性,这是其中的OpenCV中属性的一些宏定义:
#define CV_CAP_PROP_POS_MSEC 0 //以毫秒计算的当前的位置#define CV_CAP_PROP_POS_FRAMES 1 //以帧计算当前的位置#define CV_CAP_PROP_POS_AVI_RATIO 2 //视频的相对位置,从0 到 1 前面这三个参数是跟视频播放,读取相关的动态信息#define CV_CAP_PROP_FRAME_WIDTH 3 //帧宽#define CV_CAP_PROP_FRAME_HEIGHT 4 //帧高度#define CV_CAP_PROP_FPS 5 //帧率#define CV_CAP_PROP_FOURCC 6 // 字符编码方式#define CV_CAP_PROP_FRAME_COUNT 7 //视频帧数#define CV_CAP_PROP_FORMAT 8 //视频格式#define CV_CAP_PROP_MODE 9 //#define CV_CAP_PROP_BRIGHTNESS 10 //亮度#define CV_CAP_PROP_CONTRAST 11 //对比度#define CV_CAP_PROP_SATURATION 12 //饱和度#define CV_CAP_PROP_HUE 13 //色调#define CV_CAP_PROP_GAIN 14 //增益#define CV_CAP_PROP_EXPOSURE 15 //曝光#define CV_CAP_PROP_CONVERT_RGB 16 //#define CV_CAP_PROP_WHITE_BALANCE 17 //白平衡#define CV_CAP_PROP_RECTIFICATION 18
- sprintf
顺带讲一个c语言字符串拼接的知识吧,本文用于创建图像保存文件及各帧图像名称,加上#include <cstring>
即可。
sprintf(cstr, "%s%d%s", "images\\image", n++, ".jpg")
第一个参数cstr为目标串,值为后面一系列字串的拼接体;
第二个参数为后面各字串原本的类型格式,共同写在一个双引号中;
第三个参数(即后面所有的)为需要进行拼接的各种类型值;
还有就是只要cstr长度足够,可以对任意个字串进行拼接并赋给它。
还有一个长得挺像的函数sscanf
- sscanf
PAT编程考试中可以使用sscanf实现字符串到数字的转变(或者数字到字符串),如字符串‘1234’到整形数字1234,十分便捷(其实是懒233),其他众多功能请自行百度
(切割字符串等)
char str[20] = "1234";int num;sscanf(str, "%d", &num);//num中为整形数字1234
- opencv学习 视频帧截取
- 用OpenCV进行视频截取
- opencv截取视频图片保存
- python编程:使用opencv按一定间隔截取视频帧
- 《OpenCV视频中截取矩形框》
- 【OpenCV】vector<Mat> 视频截取为图片的实例
- opencv 学习之 视频读取
- Opencv学习笔记----读取视频
- opencv 学习之 视频存储
- 学习OpenCV(三十一) -- 视频处理
- OpenCV学习笔记--视频读写
- OpenCV学习之播放视频
- OpenCV学习笔记2-视频
- opencv获取视频学习 ---- 1
- Opencv学习笔记之 视频
- ffmpeg 多张图片转视频,视频转gif,截取视频,截取视频里的帧
- 学习OpenCV——初始化视频第一帧
- 学习OpenCV——初始化视频第一帧 .
- Linux strace命令
- 机器学习之验证码识别
- WampServer操作手册
- simplescreenrecorder snap应用
- 使用QFileSystemWatcher监控磁盘文件状态变化
- opencv学习 视频帧截取
- 后缀数组求最大重复子串
- 云计算的三种服务模式:IaaS,PaaS和SaaS
- Android 友盟统计的配置及实现(事件、报错统计)
- office 2016 激活弹窗在软件激活后无法去除的解决办法
- .Net缓存管理框架CacheManager
- ARM初识(一)
- EmguCV 的前世今生和扩充
- ActionScript 之 This