java使用OpenCV从视频文件中获取帧

  • 时间:
  • 浏览:37

本文真例为各人分享了java利用OpenCV从视频文件中获得帧的详细代码,供各人参考,详细内容以下

  • 真现功用:利用Java获得mp4、mov、avi等视频文件中的图象帧,每秒获得1帧图象,并保留
  • 情况请求:需求装置Opencv,装置FFmpeg,下载javacv包
  • 操纵体系:本次尝试利用的Ubuntu体系

尝试代码

import com.谷歌code.javacv.cpp.opencv_highgui;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.highgui.VideoCapture;
/**
* Created by fang on 17⑷⑹.
* 真现每播放1秒视频便截与1张图片保留到当地的操纵
* 出有利用ffmpeg,则只能读与avi格局视频
* 下载谷歌 javcv.jar
* sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
* sudo apt-get update
* sudo apt-get install ffmpeg
* /home/fang/BigDataSoft/opencv⑵.4.13/3rdparty/ffmpeg中有opencv_ffmpeg_64.dll文件
* 不克不及剖析视频,提醒moov atom not found 是文件有错
*/
public class GetFrameFormVideo {
public static void main(String[] args) {
// System.out.println("Welcome to OpenCV " + Core.VERSION);
// System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// Mat m = Mat.eye(3, 3, CvType.CV_8UC1);
// System.out.println("m = " + m.dump());
//减载当地的OpenCV库,如许就能够用它去挪用Java API
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
run2();
}
public static void run2() {
//读与视频文件
VideoCapture cap = new VideoCapture("/home/fang/Downloads/src_11.mp4");
System.out.println(cap.isOpened());
//判定视频是不是翻开
if (cap.isOpened()) {
//总帧数
double frameCount = cap.get(opencv_highgui.CV_CAP_PROP_FRAME_COUNT);
System.out.println("视频总帧数:"+frameCount);
//帧率
double fps = cap.get(opencv_highgui.CV_CAP_PROP_FPS);
System.out.println("视频帧率"+fps);
//工夫少度
double len = frameCount / fps;
System.out.println("视频总时少:"+len);
Double d_s = new Double(len);
System.out.println(d_s.intValue());
Mat frame = new Mat();
for (int i = 0; i < d_s.intValue(); i++) {
//设置视频的地位(单元:毫秒)
cap.set(opencv_highgui.CV_CAP_PROP_POS_MSEC, i * 1000);
//读与下1帧绘里
if (cap.read(frame)) {
System.out.println("正正在保留");
//保留绘里到当地目次
Highgui.imwrite("/home/fang/images/" + i + ".jpg", frame);
}
}
//封闭视频文件
cap.release();
}
}
}

呈现的毛病

剖析Mp4文件时,呈现:moov atom not found
认为是ffmpeg出有装置准确,到网上找处理法子,厥后发明是本身的视频文件有成绩。

以上便是本文的全数内容,期望对各人的进修有所帮忙,也期望各人多多撑持剧本之家。