使用前: 在用JavaCV实现以帧方式抽取视频的前,我们需要先从bytedeco/javacv下载第三方的压缩包,解压后按自己的需求往自己的IDE ( * IDEA / Eclipse * ) 导入解压缩包下JAR文件;

接下来就以代码方式来说明如何利用Javacv来将视频以帧的方式抽取出来:

import org.bytedeco.javacv.FFmpegFrameGrabber;

import org.bytedeco.javacv.Frame;

import org.bytedeco.javacv.Java2DFrameConverter;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import static org.bytedeco.javacpp.opencv_core.IplImage;

import static org.bytedeco.javacpp.opencv_core.cvReleaseImage;

import static org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage;

import static org.bytedeco.javacpp.opencv_imgcodecs.cvSaveImage;

import static org.bytedeco.javacpp.opencv_imgproc.cvSmooth;

public class JavaCV {

// the image's path;

final static String imagePath = "/home/lance/abc.jpg/";

// the vedio's path and filename;

final static String vedioPath = "/home/lance/target-a/";

final static String vedioName = "origin-a.mp4";

public static void main(String[] args) throws Exception {

smooth(imagePath);

grabberFFmpegImage(vedioPath + vedioName, vedioPath

, vedioName, 30);

}

// the method of compress image;

public static void smooth(String fileName) {

IplImage iplImage = cvLoadImage(fileName);

if (iplImage != null) {

cvSmooth(iplImage, iplImage);

cvSaveImage(fileName, iplImage);

cvReleaseImage(iplImage);

}

}

// grab ffmpegImage from vedio;

public static void grabberFFmpegImage(String filePath, String fileTargetPath

, String fileTargetName, int grabSize) throws Exception{

FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);

ff.start();

for (int i = 0; i < grabSize; i++){

Frame frame = ff.grabImage();

doExecuteFrame(frame, filePath, fileTargetName, i);

}

ff.stop();

}

// grab frame from vedio;

public static void doExecuteFrame(Frame frame, String targetFilePath, String targetFileName, int index) {

if ( frame == null || frame.image == null) {

return;

}

Java2DFrameConverter converter = new Java2DFrameConverter();

String imageMat = "jpg";

String fileName = targetFilePath + File.pathSeparator + targetFileName + "_" + index + "." + imageMat;

BufferedImage bi = converter.getBufferedImage(frame);

File output = new File(fileName);

try{

ImageIO.write(bi, imageMat, output);

} catch (IOException e) {

e.printStackTrace();

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

视频关键帧提取 java_JavaCV实现将视频以帧方式抽取相关推荐

  1. python实现视频关键帧提取(基于帧间差分)

    python实现视频关键帧提取(基于帧间差分) 在很多场景下,我们不想或者不能处理视频的每一帧图片,这时我们希望能够从视频中提取出一些重要的帧进行处理,这个过程我们称为视频关键帧提取. 关键帧提取算法 ...

  2. python视频提取关键帧_一种视频关键帧提取算法的制作方法

    本发明属于信息安全技术领域,涉及视频内容信息的提取,具体来说,是一种视频关键帧提取算法. 背景技术: 随着Internet的应用和普及,多媒体信息检索系统对社会各领域产生越来越大的影响.传统的信息检索 ...

  3. Java中grabImage_JavaCV实现将视频以帧方式抽取

    使用前: 在用JavaCV实现以帧方式抽取视频的前,我们需要先从bytedeco/javacv下载第三方的压缩包,解压后按自己的需求往自己的IDE ( * IDEA / Eclipse * ) 导入解 ...

  4. python视频帧提取并保存_如何用python实现视频关键帧提取并保存为图片?

    展开全部 import cv2 vc = cv2.VideoCapture('Test.avi') #读入视频文件2113 c=1 if vc.isOpened(): #判断是否正常打开5261 rv ...

  5. 视频镜头分割与关键帧提取

    Project Introduction 1 选题 2 工作简介 3 开发环境 Technical Detailss 1 理论知识 边缘检测 关键帧提取 2 具体算法 镜头边缘检测 计算帧与帧之间的差 ...

  6. 视频提取关键帧工具类KeyFramesExtractUtils.py,动态支持三种取帧方式,关键参数可配置,代码经过优化处理,效果和性能更好。

    同步上一期视频关键帧提取方法: 视频提取关键帧的三种方式[已调通]_君临天下tjm的博客-CSDN博客_视频关键帧提取关键代码如下:# -*- coding: utf-8 -*-"" ...

  7. 使用ffmeg提取视频关键帧

    一. 什么是关键帧 参考维基百科Key frame的解释: 关键帧,是指动画中一个绘图,定义任何的起点和终点平滑过渡.一系列关键帧定义了观看者将看到的运动,而关键帧在电影,视频或动画上的位置定义了运动 ...

  8. Python+Opencv2(三)保存视频关键帧

    文章目录 一.前言 二.视频中保存每帧图片 三.帧间差法 1.两间查分法 (1)处理一段视频 (2)批量处理视频 (3)扩展 2.三间差分法 一.前言 依然是博主毕设的手语检测,好多图片要处理哦! 今 ...

  9. 超简单的视频对象提取程序

    视频对象提取 与其说是视频对象提取,不如说是视频颜色提取,因为其本质还是使用了OpenCV的HSV颜色物体检测. HSV介绍 HSV分别代表,色调(H:hue),饱和度(S:saturation),亮 ...

最新文章

  1. keyshot卡住了还能保存吗_倒入醒酒器的红酒一次没喝完,还能倒回酒瓶保存吗?...
  2. iOS游戏框架Sprite Kit基础教程——Swift版上册
  3. wfs.js windows用法
  4. 20本重磅图书等你认领:前沿、创业、个人成长全有了
  5. 算法:线性时间选择_机器学习必修课!scikit-learn 支持向量机算法库使用小结
  6. java输入某年某个季度_Java获取某年某季度的第一天出错
  7. 计算机二级考试c语言公共知识,2016年电大最新计算机二级考试c语言公共基础题知识点.doc...
  8. 基于Metronic的Bootstrap开发框架经验总结(15)-- 更新使用Metronic 4.75版本
  9. postgres的序列(Sequence)的使用
  10. Java 求一段代码运行所需要的时间——模板方法设计模式
  11. Java基础知识强化之集合框架笔记15:List集合的特点
  12. 家用智能门锁常见的开锁方式
  13. 第一章 SDN介绍 (附件1 )【华为SDN产业链分析】
  14. 张一鸣宣布卸任字节跳动CEO,联合创始人梁汝波将接任
  15. LaTeX数学表达式
  16. 从零开始玩转Franka Panda机器人
  17. RTL8703/RTL8723/RTL8761/RTL8821/RTL8822系列蓝牙定频测试说明
  18. 0460-HDFS纠删码的机架感知
  19. 什么是HashMap?
  20. 高数习题第七章总练习题(上)

热门文章

  1. Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?
  2. 这个北航妹子也太卷了...
  3. 计算机视觉模型效果不佳,你可能是被相机的Exif信息坑了
  4. 【实战】OpenCV钢管计数分析与方法比较
  5. Java-001-面向对象
  6. 《VMware Virtual SAN权威指南》一2.2 VSAN的要求
  7. CoreAnimation —— CATransaction(隐式动画)
  8. 带权重的随机输出数组中的元素
  9. vs 中大括号之间垂直虚线显示
  10. Nagios+mutt+msmtp 无法发送邮件的问题!