Как открыть и обработать видеофайл, например.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. (Проверено!)
Я столкнулся с той же проблемой, и это сработало для меня:
- загрузить
ffmpeg
библиотека
System.loadLibrary("opencv_ffmpeg300_64");
Откройте файл:
VideoCapture vC = new VideoCapture("res/video.mp4");
копия
opencv_ffmpeg300_64.dll
отopencv\build\x64\vc11\bin
вopencv\build\java\x64
Обратите внимание, что 64
а также .dll
может отличаться от ОС к другой, те для Windows x64