您的位置 首页 java

利用JavaCV实现将视频以帧方式抽取

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

import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import javax.image io .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();
 }
 }
}
 

文章来源:智云一二三科技

文章标题:利用JavaCV实现将视频以帧方式抽取

文章地址:https://www.zhihuclub.com/185044.shtml

关于作者: 智云科技

热门文章

网站地图