В настоящее время я пытаюсь использовать opencv для чтения видео с моей камеры Canon VB-H710F.
Для этого я попробовал два разных решения:
РЕШЕНИЕ 1: Прочитать поток с адреса rtsp
VideoCapture cam ("rtsp://root:[email protected]/stream/profile1=u");
while(true)
cam >> frame;
В этом случае я использую opencv для прямого чтения из потока, закодированного с помощью H264 (profile1), однако это приводит к той же проблеме, о которой сообщается здесь http://answers.opencv.org/question/34012/ip-camera-h264-error-while-decoding/ Как предложено в В предыдущем вопросе я попытался отключить поддержку FFMPEG в установке opencv, что устранило ошибки декодирования h264, но подняло другую проблему. При доступе к потоку с помощью opencv, поддерживаемого gstreame, всегда связана большая задержка. С этим решением я получаю 15 кадров в секунду, но у меня задержка в 5 секунд, что неприемлемо, учитывая, что мне нужно приложение реального времени.
РЕШЕНИЕ 2: Прочтите кадры с http-адреса while (true) {startTime = System.currentTimeMillis ();
URL url = new URL("h t t p://[IP]/-wvhttp-01-/image.cgi");
URLConnection con = url.openConnection();
BufferedImage image = ImageIO.read(con.getInputStream());
showImage(image);
estimatedTime=System.currentTimeMillis()-startTime;
System.out.println(estimatedTime);
Thread.sleep(5);
}
Эта стратегия просто захватывает кадр из URL-адреса, предоставленного камерой. Код находится на Java, но результаты такие же на C ++ с библиотекой curl. Это решение позволяет избежать задержки первого решения, однако для захвата каждого кадра требуется немногим более 100 мс, что означает, что я могу достичь в среднем только 10 кадров в секунду.
Я хотел бы знать, как я могу прочитать видео, используя c ++ или другую библиотеку, разработанную на c ++?