|
@@ -1,146 +1,146 @@
|
|
-package cn.com.ctop.common.module.utils;
|
|
|
|
-
|
|
|
|
-import com.google.common.collect.Lists;
|
|
|
|
-import org.bytedeco.javacpp.opencv_core;
|
|
|
|
-import org.bytedeco.javacv.FFmpegFrameGrabber;
|
|
|
|
-import org.bytedeco.javacv.Frame;
|
|
|
|
-import org.bytedeco.javacv.Java2DFrameConverter;
|
|
|
|
-import org.opencv.core.CvType;
|
|
|
|
-import org.opencv.core.Mat;
|
|
|
|
-import org.opencv.core.MatOfByte;
|
|
|
|
-import org.opencv.imgcodecs.Imgcodecs;
|
|
|
|
-import org.opencv.imgproc.Imgproc;
|
|
|
|
-
|
|
|
|
-import javax.imageio.ImageIO;
|
|
|
|
-import java.awt.*;
|
|
|
|
-import java.awt.image.BufferedImage;
|
|
|
|
-import java.awt.image.DataBufferByte;
|
|
|
|
-import java.io.ByteArrayInputStream;
|
|
|
|
-import java.io.File;
|
|
|
|
-import java.io.IOException;
|
|
|
|
-import java.io.InputStream;
|
|
|
|
-import java.util.List;
|
|
|
|
-
|
|
|
|
-public class JavacvUtil {
|
|
|
|
- /**
|
|
|
|
- * 视频文件指定时间段的帧截取
|
|
|
|
- * @param file
|
|
|
|
- * @param start
|
|
|
|
- * @param end
|
|
|
|
- */
|
|
|
|
- public static List<File> videoIntercept(File file, Integer start, Integer end) {
|
|
|
|
- Frame frame = null;
|
|
|
|
- List<File> files = Lists.newArrayList();
|
|
|
|
- FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(file);
|
|
|
|
- String filePath = "D://video//images//";
|
|
|
|
- String fileTargetName = "movie";
|
|
|
|
- try {
|
|
|
|
- fFmpegFrameGrabber.start();
|
|
|
|
- int ftp = fFmpegFrameGrabber.getLengthInFrames();
|
|
|
|
- for (int i=0 ; i < ftp ; i++){
|
|
|
|
- if( i >= start && i <= end){
|
|
|
|
- frame = fFmpegFrameGrabber.grabImage();
|
|
|
|
- doExecuteFrame(frame, filePath, fileTargetName, i ,files);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- fFmpegFrameGrabber.stop();
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- return files;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static void doExecuteFrame(Frame frame, String targetFilePath, String targetFileName, int index ,List<File> files) {
|
|
|
|
- if ( frame == null || frame.image == null) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- Java2DFrameConverter converter = new Java2DFrameConverter();
|
|
|
|
- String imageMat = "jpg";
|
|
|
|
- String fileName = targetFilePath + targetFileName + "_" + index + "." + imageMat;
|
|
|
|
- BufferedImage bi = converter.getBufferedImage(frame);
|
|
|
|
-
|
|
|
|
-// Mat img = Imgcodecs.imread("");
|
|
|
|
-// Mat imgHSV = new Mat(img.rows(), img.cols(), CvType.CV_8UC3);
|
|
|
|
-// Mat img2 = new Mat(img.rows(), img.cols(), CvType.CV_8UC3);
|
|
|
|
-
|
|
|
|
- //转成HSV空间
|
|
|
|
-// Imgproc.cvtColor(img, imgHSV, Imgproc.COLOR_BGR2HSV);
|
|
|
|
-// //转回BGR空间
|
|
|
|
-// Imgproc.cvtColor(imgHSV, img2, Imgproc.COLOR_HSV2BGR);
|
|
|
|
-
|
|
|
|
- File output = new File(fileName);
|
|
|
|
- files.add(output);
|
|
|
|
- try{
|
|
|
|
- ImageIO.write(bi, imageMat, output);
|
|
|
|
- } catch (IOException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static void main(String[] args) {
|
|
|
|
- List<File> files = videoIntercept(new File("C:\\Users\\宋英豪\\Desktop\\nfpHmswW.mp4"), 10, 100);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Mat转换成BufferedImage
|
|
|
|
- *
|
|
|
|
- * @param matrix
|
|
|
|
- * 要转换的Mat
|
|
|
|
- * @param fileExtension
|
|
|
|
- * 格式为 ".jpg", ".png", etc
|
|
|
|
- * @return
|
|
|
|
- */
|
|
|
|
- public static BufferedImage Mat2BufImg (Mat matrix, String fileExtension) {
|
|
|
|
- // convert the matrix into a matrix of bytes appropriate for
|
|
|
|
- // this file extension
|
|
|
|
- MatOfByte mob = new MatOfByte();
|
|
|
|
- Imgcodecs.imencode(fileExtension, matrix, mob);
|
|
|
|
- // convert the "matrix of bytes" into a byte array
|
|
|
|
- byte[] byteArray = mob.toArray();
|
|
|
|
- BufferedImage bufImage = null;
|
|
|
|
- try {
|
|
|
|
- InputStream in = new ByteArrayInputStream(byteArray);
|
|
|
|
- bufImage = ImageIO.read(in);
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- return bufImage;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * BufferedImage转换成Mat
|
|
|
|
- *
|
|
|
|
- * @param original
|
|
|
|
- * 要转换的BufferedImage
|
|
|
|
- * @param imgType
|
|
|
|
- * bufferedImage的类型 如 BufferedImage.TYPE_3BYTE_BGR
|
|
|
|
- * @param matType
|
|
|
|
- * 转换成mat的type 如 CvType.CV_8UC3
|
|
|
|
- */
|
|
|
|
- public static Mat BufImg2Mat (BufferedImage original, int imgType, int matType) {
|
|
|
|
- if (original == null) {
|
|
|
|
- throw new IllegalArgumentException("original == null");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Don't convert if it already has correct type
|
|
|
|
- if (original.getType() != imgType) {
|
|
|
|
-
|
|
|
|
- // Create a buffered image
|
|
|
|
- BufferedImage image = new BufferedImage(original.getWidth(), original.getHeight(), imgType);
|
|
|
|
-
|
|
|
|
- // Draw the image onto the new buffer
|
|
|
|
- Graphics2D g = image.createGraphics();
|
|
|
|
- try {
|
|
|
|
- g.setComposite(AlphaComposite.Src);
|
|
|
|
- g.drawImage(original, 0, 0, null);
|
|
|
|
- } finally {
|
|
|
|
- g.dispose();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- byte[] pixels = ((DataBufferByte) original.getRaster().getDataBuffer()).getData();
|
|
|
|
- Mat mat = Mat.eye(original.getHeight(), original.getWidth(), matType);
|
|
|
|
- mat.put(0, 0, pixels);
|
|
|
|
- return mat;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
+//package cn.com.ctop.common.module.utils;
|
|
|
|
+//
|
|
|
|
+//import com.google.common.collect.Lists;
|
|
|
|
+//import org.bytedeco.javacpp.opencv_core;
|
|
|
|
+//import org.bytedeco.javacv.FFmpegFrameGrabber;
|
|
|
|
+//import org.bytedeco.javacv.Frame;
|
|
|
|
+//import org.bytedeco.javacv.Java2DFrameConverter;
|
|
|
|
+//import org.opencv.core.CvType;
|
|
|
|
+//import org.opencv.core.Mat;
|
|
|
|
+//import org.opencv.core.MatOfByte;
|
|
|
|
+//import org.opencv.imgcodecs.Imgcodecs;
|
|
|
|
+//import org.opencv.imgproc.Imgproc;
|
|
|
|
+//
|
|
|
|
+//import javax.imageio.ImageIO;
|
|
|
|
+//import java.awt.*;
|
|
|
|
+//import java.awt.image.BufferedImage;
|
|
|
|
+//import java.awt.image.DataBufferByte;
|
|
|
|
+//import java.io.ByteArrayInputStream;
|
|
|
|
+//import java.io.File;
|
|
|
|
+//import java.io.IOException;
|
|
|
|
+//import java.io.InputStream;
|
|
|
|
+//import java.util.List;
|
|
|
|
+//
|
|
|
|
+//public class JavacvUtil {
|
|
|
|
+// /**
|
|
|
|
+// * 视频文件指定时间段的帧截取
|
|
|
|
+// * @param file
|
|
|
|
+// * @param start
|
|
|
|
+// * @param end
|
|
|
|
+// */
|
|
|
|
+// public static List<File> videoIntercept(File file, Integer start, Integer end) {
|
|
|
|
+// Frame frame = null;
|
|
|
|
+// List<File> files = Lists.newArrayList();
|
|
|
|
+// FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(file);
|
|
|
|
+// String filePath = "D://video//images//";
|
|
|
|
+// String fileTargetName = "movie";
|
|
|
|
+// try {
|
|
|
|
+// fFmpegFrameGrabber.start();
|
|
|
|
+// int ftp = fFmpegFrameGrabber.getLengthInFrames();
|
|
|
|
+// for (int i=0 ; i < ftp ; i++){
|
|
|
|
+// if( i >= start && i <= end){
|
|
|
|
+// frame = fFmpegFrameGrabber.grabImage();
|
|
|
|
+// doExecuteFrame(frame, filePath, fileTargetName, i ,files);
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// fFmpegFrameGrabber.stop();
|
|
|
|
+// } catch (Exception e) {
|
|
|
|
+// e.printStackTrace();
|
|
|
|
+// }
|
|
|
|
+// return files;
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// public static void doExecuteFrame(Frame frame, String targetFilePath, String targetFileName, int index ,List<File> files) {
|
|
|
|
+// if ( frame == null || frame.image == null) {
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// Java2DFrameConverter converter = new Java2DFrameConverter();
|
|
|
|
+// String imageMat = "jpg";
|
|
|
|
+// String fileName = targetFilePath + targetFileName + "_" + index + "." + imageMat;
|
|
|
|
+// BufferedImage bi = converter.getBufferedImage(frame);
|
|
|
|
+//
|
|
|
|
+//// Mat img = Imgcodecs.imread("");
|
|
|
|
+//// Mat imgHSV = new Mat(img.rows(), img.cols(), CvType.CV_8UC3);
|
|
|
|
+//// Mat img2 = new Mat(img.rows(), img.cols(), CvType.CV_8UC3);
|
|
|
|
+//
|
|
|
|
+// //转成HSV空间
|
|
|
|
+//// Imgproc.cvtColor(img, imgHSV, Imgproc.COLOR_BGR2HSV);
|
|
|
|
+//// //转回BGR空间
|
|
|
|
+//// Imgproc.cvtColor(imgHSV, img2, Imgproc.COLOR_HSV2BGR);
|
|
|
|
+//
|
|
|
|
+// File output = new File(fileName);
|
|
|
|
+// files.add(output);
|
|
|
|
+// try{
|
|
|
|
+// ImageIO.write(bi, imageMat, output);
|
|
|
|
+// } catch (IOException e) {
|
|
|
|
+// e.printStackTrace();
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// public static void main(String[] args) {
|
|
|
|
+// List<File> files = videoIntercept(new File("C:\\Users\\宋英豪\\Desktop\\nfpHmswW.mp4"), 10, 100);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// /**
|
|
|
|
+// * Mat转换成BufferedImage
|
|
|
|
+// *
|
|
|
|
+// * @param matrix
|
|
|
|
+// * 要转换的Mat
|
|
|
|
+// * @param fileExtension
|
|
|
|
+// * 格式为 ".jpg", ".png", etc
|
|
|
|
+// * @return
|
|
|
|
+// */
|
|
|
|
+// public static BufferedImage Mat2BufImg (Mat matrix, String fileExtension) {
|
|
|
|
+// // convert the matrix into a matrix of bytes appropriate for
|
|
|
|
+// // this file extension
|
|
|
|
+// MatOfByte mob = new MatOfByte();
|
|
|
|
+// Imgcodecs.imencode(fileExtension, matrix, mob);
|
|
|
|
+// // convert the "matrix of bytes" into a byte array
|
|
|
|
+// byte[] byteArray = mob.toArray();
|
|
|
|
+// BufferedImage bufImage = null;
|
|
|
|
+// try {
|
|
|
|
+// InputStream in = new ByteArrayInputStream(byteArray);
|
|
|
|
+// bufImage = ImageIO.read(in);
|
|
|
|
+// } catch (Exception e) {
|
|
|
|
+// e.printStackTrace();
|
|
|
|
+// }
|
|
|
|
+// return bufImage;
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// /**
|
|
|
|
+// * BufferedImage转换成Mat
|
|
|
|
+// *
|
|
|
|
+// * @param original
|
|
|
|
+// * 要转换的BufferedImage
|
|
|
|
+// * @param imgType
|
|
|
|
+// * bufferedImage的类型 如 BufferedImage.TYPE_3BYTE_BGR
|
|
|
|
+// * @param matType
|
|
|
|
+// * 转换成mat的type 如 CvType.CV_8UC3
|
|
|
|
+// */
|
|
|
|
+// public static Mat BufImg2Mat (BufferedImage original, int imgType, int matType) {
|
|
|
|
+// if (original == null) {
|
|
|
|
+// throw new IllegalArgumentException("original == null");
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// // Don't convert if it already has correct type
|
|
|
|
+// if (original.getType() != imgType) {
|
|
|
|
+//
|
|
|
|
+// // Create a buffered image
|
|
|
|
+// BufferedImage image = new BufferedImage(original.getWidth(), original.getHeight(), imgType);
|
|
|
|
+//
|
|
|
|
+// // Draw the image onto the new buffer
|
|
|
|
+// Graphics2D g = image.createGraphics();
|
|
|
|
+// try {
|
|
|
|
+// g.setComposite(AlphaComposite.Src);
|
|
|
|
+// g.drawImage(original, 0, 0, null);
|
|
|
|
+// } finally {
|
|
|
|
+// g.dispose();
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// byte[] pixels = ((DataBufferByte) original.getRaster().getDataBuffer()).getData();
|
|
|
|
+// Mat mat = Mat.eye(original.getHeight(), original.getWidth(), matType);
|
|
|
|
+// mat.put(0, 0, pixels);
|
|
|
|
+// return mat;
|
|
|
|
+// }
|
|
|
|
+//}
|