Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > отображение mjpg в opencv


Автор: iff 14.2.2016, 17:09
Вывожу видео с web-камеры:
Код

#include <opencv2/opencv.hpp>
#include <iostream>

int main(int, char**) {
    cv::VideoCapture vcap;
    cv::Mat image;

    const std::string videoStreamAddress = "http://1.1.1.1/mjpg/video.mjpg";


    //open the video stream and make sure it's opened
    if(!vcap.open(videoStreamAddress)) {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

    for(;;) {
        if(!vcap.read(image)) {
            std::cout << "No frame" << std::endl;
            cv::waitKey();
        }
        cv::imshow("Output Window", image);
        if(cv::waitKey(1) >= 0) break;
    }   
}

(пример из интернета)
Изображение выводиться, но в консоле отображается масса ошибок:
Код

[mjpeg @ 003b4780] max_analyze_duration 5000000 reached at 5000000
[mjpeg @ 003b4780] Estimating duration from bitrate, this may be inaccurate
[mjpeg @ 003b69c0] max_analyze_duration 5000000 reached at 5000000
[mjpeg @ 003b69c0] Estimating duration from bitrate, this may be inaccurate
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 0127cba0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 00f94fe0] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 00f94fe0] No accelerated colorspace conversion found from yuv422p to
 bgr24.

...

[swscaler @ 01000480] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 01000480] No accelerated colorspace conversion found from yuv422p to
 bgr24.
[swscaler @ 01000480] No accelerated colorspace conversion found from yuv422p to
 bgr24.

...

Такие ошибки идут постоянно при каждом кадре.
OpenCV 2.3.1, Visual Studio 2010, Windows XP SP3

Автор: iff 14.2.2016, 19:33
Установил вместо opencv 2.3.1 версию 2.2.0
Теперь такой кучи ошибок нет, но подключается долго (долще чем браузер) и в начале выдаёт пару ошибок:
Код

[mjpeg @ 0x19e0070]max_analyze_duration reached
[mjpeg @ 0x19e0070]Estimating duration from bitrate, this may be inaccurate
[mjpeg @ 0x1c3f030]max_analyze_duration reached
[mjpeg @ 0x1c3f030]Estimating duration from bitrate, this may be inaccurate

Автор: baldman88 15.2.2016, 00:38
Есть подозрение, что Вы слишком быстро пытаетесь читать кадры с камеры. Читаете с WEB-камеры? Попробуйте читать по таймеру (для 25-ти кадров в секунду время таймера около 40мс).

Автор: WERITAS 15.2.2016, 07:06
А можете поподробнее написать что за камера у вас? Вообще веб-камера - это та, что через USB включается. Если у вас такая, то откуда взялся ip-адрес 1.1.1.1 ? И что это за адрес такой? В сетях Windows адреса 192.168.х.х. Куда вы выводите видео с камеры? Тупо в консоль? Почему в файл сохранить не попробовали?

Автор: iff 15.2.2016, 21:24
Цитата(baldman88 @  15.2.2016,  00:38 Найти цитируемый пост)
Есть подозрение, что Вы слишком быстро пытаетесь читать кадры с камеры.

По всей вероятности метод read ждет следующего кадра (выполняя события windows), т.е. цикл проходится не предельно быстро а с такой частотой, сколько кадров в секунду даёт камера.
Т.е. если waitKey(1) заменить на waitKey(30), то ничего не измениться в отношении частоты прохода цикла и частоты кадров (одна из причин - внутри цикла не надо ничего считать), а если заменить на waitKey(1000) то fps понизиться до 1 кадра в екунду.
Ошибка возникает во время исполнения метода open. Причем после того, как подождать пока все заработает в начале видео идёт ускоренно. Скорее всего он воспринемает адрес на on-line трансляцию на адрес на обычный файл и пытается его загрузить в буфер, потом, то что загрузилось показывается максимально быстро (если стоит waitKey(1)). Т.е. если изменить open(videoStreamAddress) на open(0), такой ошибки не происходит и он сразу начинает показывать видео, т.к. понимает что open(0) это значит нужно открыть камеру подключенную к компьютеру.

Цитата(WERITAS @  15.2.2016,  07:06 Найти цитируемый пост)
А можете поподробнее написать что за камера у вас? Вообще веб-камера - это та, что через USB включается. Если у вас такая, то откуда взялся ip-адрес 1.1.1.1 ? И что это за адрес такой? 

Это, правельнее сказать, on-line трансляция с web-камеры, которая выходит на улицу города. Адрес на самом деле не 1.1.1.1.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)