Как открыть и обработать видеофайл, например.mpeg или.avi, используя метод openCV VideoCapture в Java

    import org.opencv.core.Core;        
    import org.opencv.core.Mat;        
    import org.opencv.core.Size;        
    import org.opencv.highgui.Highgui;        
    import org.opencv.highgui.VideoCapture;        
    import org.opencv.imgproc.Imgproc;        

    public class Video        
    {        
        public static void main(String[] args)        
        {        
            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);        

    VideoCapture cap = new VideoCapture(0);

    cap.open(1);

    if(!cap.isOpened())
    {
        System.out.println("No camera");
    }

    else
    {
        System.out.println("Yes. Camera");
    }

    Mat frame = new Mat();
    cap.retrieve(frame);

    Highgui.imwrite("me1.jpg", frame);
    Mat frameBlur = new Mat();

    Imgproc.blur(frame, frameBlur, new Size(5,5));
    Highgui.imwrite("me2-blurred.jpg", frameBlur);

    Imgproc.GaussianBlur(frame, frameBlur, new Size(25, 25), 20);
    Highgui.imwrite("me3-blurred.jpg", frameBlur);

    cap.release();
        }
    }

Я использовал этот код, чтобы открыть свое устройство Camera и захватить 3 разных кадра, и сделал с ним некоторые операции. Но я не смог открыть файл типа.avi /.mpg /.mp4 и т. Д., Используя метод {n_open} VideoCapture. В реализации VideoCapture есть метод. Но так как это частный и нативный метод, этот метод не может быть доступен с помощью объекта VideoCapture.

Может кто-нибудь помочь, как это сделать, используя чистый OpenCV 2.4.6 и Java
(Пожалуйста, не предлагайте решение с использованием библиотек обработки)

2 ответа

Посмотрите на OpenCV 2.4.8, VideoCapture API был расширен public VideoCapture(String filename) метод. Остается вопрос, почему эта функция была реализована так поздно.

Если по какой-то причине использование последней версии OpenCV для вас неприемлемо, у вас есть несколько вариантов:

  • Соберите OpenCV самостоятельно, используя этот метод, помеченный как публичный.

  • HACKY ONE: Сделайте свою копию класса VideoCapture (или расширите оригинальную и поиграйте с отражением) публично VideoCapture(String) конструктор. Тогда дайте поддержку нативному методу private static native long n_VideoCapture(java.lang.String filename) создавая свою собственную DLL с использованием C++ OpenCV API. (Проверено!)

Я столкнулся с той же проблемой, и это сработало для меня:

  1. загрузить ffmpeg библиотека

System.loadLibrary("opencv_ffmpeg300_64");

  1. Откройте файл:

    VideoCapture vC = new VideoCapture("res/video.mp4");

  2. копия opencv_ffmpeg300_64.dll от opencv\build\x64\vc11\bin вopencv\build\java\x64

Обратите внимание, что 64 а также .dll может отличаться от ОС к другой, те для Windows x64

Другие вопросы по тегам