LINUX.ORG.RU

VideoCapture из буффера

 , , ,


0

1

Добрый день!

Программа принимает по сети (via WebSocket) видеоролик, допустим это vp8, соответственно у меня есть некоторая память, которая его содержит. Предположим это std::vector<uint8_t> video.

Как скормить это OpenCV? Может использовать что-то стороннее,бить на кадры и делать из них cv::Mat?

OpenCV использует VideoCapture для работы с видео: http://docs.opencv.org/3.1.0/d8/dfe/classcv_1_1VideoCapture.html

VideoCapture умеет грузить видео из файла и из видео потока с web камеры. Формат ссылки на видео поток для вёбкамеры: http://192.168.0.50:8080/video?x.mjpeg

Не знаю, сможешь ли ты засунуть свой поток в такой вид.

Если не сможешь, то я бы брал какой-нибудь инструмент для работы с vp8 (сам с ним не работам, так что хз) и дёргал из него кадры. Вот тут что-то есть: http://wiki.webmproject.org/vp8-implementations

P.S. Не забывай, что cv::Mat работает с BGR форматом цвета по умолчанию.

Norgat ★★★★★ ()
Ответ на: комментарий от Norgat

Не знаю, сможешь ли ты засунуть свой поток в такой вид.

Неа.

Если не сможешь, то я бы брал какой-нибудь инструмент для работы с vp8 (сам с ним не работам, так что хз) и дёргал из него кадры.

Уже осваиваю libav =)

P.S. Не забывай, что cv::Mat работает с BGR форматом цвета по умолчанию.

Да, я с пистоном когда игрался это заметил, благодарю за напоминание.

BruteForce ★★★ ()

Всегда поражался, когда в библиотеке есть функция чтения из файла, но нет из буффера в памяти. Если её нет, библиотеку писали конченые люди. Но OpenCV умеет читать из памяти, я с ней игрался лет 5 назад. Подробностей, увы, не помню.

anonymous ()
Ответ на: комментарий от anonymous

когда в библиотеке есть функция чтения из файла, но нет из буффера в памяти. Если её нет, библиотеку писали конченые люди.

Двачую.

Но OpenCV умеет читать из памяти

Не нашел(

BruteForce ★★★ ()
Ответ на: комментарий от anonymous

cv::Mat из памяти умеет, чтение видео из памяти - не припомню.

Norgat ★★★★★ ()

У меня приходит char*, но он в формате JPG.

На клиенте:

std::vector<uchar>buff(buffSizeTmp);
//fill buffer
cv::Mat mat = cv::imdecode(buff, 1);

На сервере:
std::vector<int> compressionParams;
compressionParams.push_back(CV_IMWRITE_JPEG_QUALITY);
compressionParams.push_back(CConfig::getInstance().mConnectionSettings->mJPEGQuality);

std::vector<unsigned char>buff;
cv::imencode(".jpg", mat->getMat(type), buff, compressionParams);

ymuv ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.