Извлечь неподвижное изображение из файла MJPEG? - PullRequest
1 голос
/ 16 февраля 2011

Мне нужно изменить каждое jpg-изображение файла mjpeg.

Мне нужно использовать Visual Studio C ++ 2010.

Пока мне нужно:) загрузить файл mjpeg изисходный код и б) извлечь растровое изображение (CImage, байтовый массив, ...)

В псевдокоде это должно выглядеть так:?Я уже пытался прийти вместе с OpenCV2.1.0, но всегда есть ошибка LNK2001.( Tutorial с официального сайта).

Является ли OpenCV правильным способом или кто-нибудь знает способ проще?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Использование инструментов gstreamer

для источника на основе ip

gst-launch souphttpsrc location="http://[ip]:[port]/[dir]/xxx.cgi" do-timestamp=true is_live=true ! multipartdemux ! jpegdec !  videoflip method=vertical-flip ! jpegenc !  multifilesink location=image-out-%05d.jpg

для источника файла с кодеком mjpeg и контейнером avi

gst-launch filesrc location="xyz.avi" ! multipartdemux ! jpegdec !  videoflip method=vertical-flip ! jpegenc !  multifilesink location=image-out-%05d.jpg
1 голос
/ 19 февраля 2011

Хотите использовать изображения JPEG в видео или распаковать их в любом случае?

Поток MJPEG состоит из множества изображений JPEG без обычного заголовка JPEG (и словарей кодов).Поэтому, если вы хотите извлечь их без потерь и получить много файлов JPEG в каталоге, вам могут подойти другие инструменты.

Однако, если вы все равно измените их, вам нужно будет распаковать их.OpenCV - хороший способ сделать это, если у вас есть необходимые бэкэнды для декодирования потока (некоторые кодеки для Windows ... в Linux библиотеки ffmpeg будут декодировать почти все для вас).

Так что ябудет делать что-то вроде этого:

CvCapture *capture = cvCaptureFromFile("filename.avi");
IplImage *current_frame = NULL;
while(current_frame = cvQueryFrame(capture)) {
  process(current_frame); // that's your modification code
}

См. это:

http://opencv.willowgarage.com/documentation/c/highgui_reading_and_writing_images_and_video.html

Для ошибки компоновщика: LNK2001 это "неразрешенный внешний символ", так что ...Вы добавили библиотеку?(Дополнительные зависимости, добавьте все четыре библиотеки (cv210.lib cxcore210.lib, cvaux210.lib и highgui210.lib, или ... проверьте правильность имен в вашей установке OpenCV). Убедитесь, что ваш проект скомпилирован для 32-битной (или такой жекак OpenCV), и не забудьте добавить путь к библиотекам.

...