文章简介:对拍取的视频需要手动截取或者分帧截取图片,本文拟实现此功能。可多次、任意帧截取。

操作说明:空格键开始截取,回车键退出视频。

开发环境:EMGU2.4.9 + VS2010 +Win7(64)。

public void VideoCatch(string filepath){try{IntPtr CatchFrame =CvInvoke.cvCreateFileCapture(filepath);CvInvoke.cvNamedWindow("打开视频");// 得到总帧数CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT);// 视频宽度int wd = (int)CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH);// 视频高度int hg = (int) CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT);// 当前帧位置CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES);// 帧频CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS);while (true){var FrameImg = CvInvoke.cvQueryFrame(CatchFrame);CvInvoke.cvShowImage("打开视频", FrameImg);Image<Bgr, byte> FramePic = new Image<Bgr, byte>(wd,hg);CvInvoke.cvCopy(FrameImg,FramePic,IntPtr.Zero);int c = CvInvoke.cvWaitKey(20);if (c == 13) break;if (c == 32) {Random rd = new Random();Bitmap bt = new Bitmap(FramePic.ToBitmap());string picname = rd.Next()+".jpg";bt.Save(picname);Console.WriteLine("保存成功!"+picname);}}}catch (Exception ex){MessageBox.Show(ex.ToString());}}

—————————————————————————————————————————————————————————————————————————————

运行截图,按下空格键进行截图,并在命令行显示保存的文件名:

————————————————————————————————————————————————————————————————————————————
————————————————————————————————————————————————————————————————————————————
————————————————————————————————————————————————————————————————————————————
————————————————————————————————————————————————————————————————————————————

验证结果:

————————————————————————————————————————————————————————————————————————————
————————————————————————————————————————————————————————————————————————————

需要注意的问题:

1.把视频帧保存为图片时,先建立一个图片实例,图片的width和height必须与原视频保持一致,即Image<Bgr, byte> FramePic = new Image<Bgr, byte>(wd,hg);
2.其中,wd和hg根据视频的属性来提取并注意数据转换,double——int。
  // 视频宽度
                int wd = (int)CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH);
                // 视频高度
                int hg = (int) CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT);
3.同上原理,需要其他处理视频帧也是十分快速方便的。

【EMGU】读取视频AVI文件+保存任意帧为图片相关推荐

  1. MATLAB的figure文件保存成高清图片的技巧01

    figure文件保存成高清图片的技巧01 鉴于广大砖友在用MATLAB保存figure图片时,会出现图片分辨率不够高,粘贴使用不清晰,导致文章整体视觉效果欠佳的情况,我觉得有义务有责任分享一下我的经验 ...

  2. python一帧一帧读取视频_用Python从视频中提取每一帧的图片

    大家应该都有这样的情况:在看到某些视频的画面时感觉美如画,想截取下来却又烦于截图的繁琐,现在我就教大家使用Python提取视频中每一帧的画面,让大家不错过每一个精彩的瞬间! •语言:Python •所 ...

  3. java 视频 缩略图_如何使用java提取视频缩略图或某一帧的图片

    [Java] 纯文本查看 复制代码public class CreateImage { /** * 获取指定视频的帧并保存为图片至指定目录 * [url=home.php?mod=space& ...

  4. python批量读取视频并按指定数量抽帧

    import cv2 import time import os i=0 j=250 file1='./file1/' f = os.listdir('./video') for im in f:pr ...

  5. C++Opencv实时读取摄像头视频保存指定帧图片

    空格截图到指定文档 string writePath = "../temp/"; int main(int argc, char** argv){VideoCapture capt ...

  6. cv2.VideoWriter生成avi文件无法打开

    cv2.VideoWriter生成avi文件无法打开 在opencv的学习中会遇到用cv2.VideoWriter创建的avi文件无法打开的问题,很多问题其他的文章都有,这是我自己碰到的没有出现过的问 ...

  7. python︱批量操作文件(os)、图片操作技巧(下载网络图片、skimage.io)

    文章目录 @[toc] . 一.遍历操作文件 1.文件名字获取 **注意,不能`import glob` ,不然就会报错:** 2.批量重命名文件os.rename 直接修改了上级目录,test2.t ...

  8. python(二)进阶之cv2读取视频文件或摄像头,并进行保存帧图像或视频

    版本 # 4.5.1 python import cv2 cv2.__version__ 函数 # 参数0表示默认为笔记本的内置第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径, # 例如: ...

  9. java opencv 读取视频_java使用OpenCV从视频文件中获取帧

    本文实例为大家分享了java使用OpenCV从视频文件中获取帧的具体代码,供大家参考,具体内容如下 实现功能:使用Java获取mp4.mov.avi等视频文件中的图像帧,每秒获取一帧图像,并保存 环境 ...

最新文章

  1. 关于IOS的屏幕适配(iPhone)——资源适配
  2. WinCE中sources文件中targetlibs与sourcelibs的作用与区别
  3. Android VNC Server
  4. spring boot + vue + element-ui全栈开发入门——项目部署
  5. 少儿编程100讲轻松学python(十一)-python如何保留小数点位数
  6. oracle 11g 通过在线重定义方式修改表结构
  7. [经典]技术面试宝典: 很全面的算法和数据结构知识(含代码)
  8. AFNetworking请求服务器错误
  9. avr单片机流水灯程序c语言,动手学AVR单片机流水灯实验电路和程序实现.doc
  10. matlab加特定频率的噪声,如何在Matlab/Simulink中生成指定的白噪声和有色噪声
  11. 电子加速器原理与应用
  12. 极域课堂分发文件与一键开关机教程
  13. VBA:MsgBox函数
  14. my love(新贵公子主题歌)铃声 my love(新贵公子主题歌)手机铃...
  15. 计算机应用月什么,计算机应用月考试卷
  16. ScriptManager的简单用法
  17. 极客 android,一款开源的Android极客应用(来一起学习kotlin)
  18. 迈向更灵活,贝壳 OLAP 平台架构演进历程
  19. 牛顿插值法与拉格朗日插值法——实例
  20. Syslog服务器配置和日志转发

热门文章

  1. 想对在大学里的同学们说。
  2. RTKLIB源码解析(一)、单点定位(pntpos.c)
  3. RTKLIB源码及介绍
  4. HTML - 隐藏滚动条但可以滚动
  5. 九度笔记之 项目安排
  6. 【转】USB--设备、配置、接口、端点
  7. fping安装包linux,Linux系统--CentOS 7.6.1810 安装 fping 3.15
  8. 全栈开发学习记录:什么是全栈开发?
  9. depth estimation笔记
  10. 八爪鱼爬取搜索引擎链接列表后如何循环点击每个列表里的特定元素呢?