Установка OpenCV в Ubuntu 14.10

Я пытаюсь установить OpenCV в Ubuntu 14.10 в соответствии с инструкцией. . Я установил все упомянутые зависимости, но при попытке запустить make получаю такие ошибки:

/home/ilia/opencv-2.4.8/modules/highgui/src/ffmpeg_codecs.hpp:114:7: error: ‘CODEC_ID_H261’ was not declared in this scope
 { CODEC_ID_H261, MKTAG('H', '2', '6', '1') }

для всех кодеков, как я думаю. И эти ошибки:

    In file included from /home/ilia/opencv-2.4.8/modules/highgui/src/cap_ffmpeg.cpp:45:0:
/home/ilia/opencv-2.4.8/modules/highgui/src/cap_ffmpeg_impl.hpp: In member function ‘double CvCapture_FFMPEG::getProperty(int)’:
/home/ilia/opencv-2.4.8/modules/highgui/src/cap_ffmpeg_impl.hpp:773:33: error: ‘AVStream’ has no member named ‘r_frame_rate’
         return av_q2d(video_st->r_frame_rate);
                                 ^
/home/ilia/opencv-2.4.8/modules/highgui/src/cap_ffmpeg_impl.hpp: In member function ‘double CvCapture_FFMPEG::get_fps()’:
/home/ilia/opencv-2.4.8/modules/highgui/src/cap_ffmpeg_impl.hpp:820:49: error: ‘AVStream’ has no member named ‘r_frame_rate’
     double fps = r2d(ic->streams[video_stream]->r_frame_rate);
                                                 ^
In file included from /home/ilia/opencv-2.4.8/modules/highgui/src/cap_ffmpeg.cpp:45:0:
/home/ilia/opencv-2.4.8/modules/highgui/src/cap_ffmpeg_impl.hpp: In function ‘int icv_av_write_frame_FFMPEG(AVFormatContext*, AVStream*, uint8_t*, uint32_t, AVFrame*)’:
/home/ilia/opencv-2.4.8/modules/highgui/src/cap_ffmpeg_impl.hpp:1236:72: error: ‘avcodec_encode_video’ was not declared in this scope
         out_size = avcodec_encode_video(c, outbuf, outbuf_size, picture);
                                                                        ^    

Похоже, он не может найти некоторые заголовочные файлы, но я установил все необходимые пакеты разработки libswscale-dev, libavdevice-dev, libavfilter-dev, libavformat-dev, libavcodec-dev. Что мне делать, чтобы решить эти проблемы?


person Ilia    schedule 27.10.2014    source источник
comment
в Ubuntu 14.10 libav использует API версии 11. OpenCV по-прежнему использует API версии 9, содержащуюся в Ubuntu 14.04 LTS. Я думаю, что они должны предоставить патч для этого   -  person madduci    schedule 01.11.2014


Ответы (3)


Если у вас нет особых причин, я бы предложил установить OpenCV, который уже находится в репозитории Ubuntu: sudo apt-get install libopencv-dev

Для видеокодеков я предлагаю просто попробовать установить все пакеты кодеков, связанные с ffmpeg и gstreamer.

person Hannes Ovrén    schedule 27.10.2014
comment
Спасибо. Это было намного проще, чем я думал. - person Ilia; 27.10.2014
comment
ну это не решение. Особенно, если кому-то требуются Qt, CUDA, OpenNI. - person madduci; 31.10.2014

Установка OpenCV из репозиториев Ubuntu — хороший выбор в большинстве случаев, но иногда вам нужно собрать OpenCV из исходников самостоятельно.

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

Возможным решением является сборка ffmpeg (это довольно просто) - я действительно не понимаю, почему Debian/Ubuntu предпочитает libav без альтернативы.

Для установки ffmpeg необходимо скачать его исходники с официального сайта или клонировать GIT репозиторий (git://source.ffmpeg.org/ffmpeg.git), затем войдите в исходный каталог и запустите

./configure --enable-shared --disable-static
make
sudo make install

вы также можете добавить другие параметры к configure. Вы также можете создавать статические библиотеки, но OpenCV не может быть собран со статическими библиотеками ffmpeg (теперь я не знаю, почему).

После этого вы можете скачать исходники OpenCV с сайт OpenCV или клонировать репозиторий GitHub (репозиторий OpenCV), создайте папку сборки и запустите из нее следующее:

cmake PATH_TO_SOURCES -DCMAKE_BUILD_TYPE=Выпуск
make
sudo make install

Конечно, PATH_TO_SOURCES должен быть фактическим путем к вашим источникам OpenCV.

После этих шагов у вас будет рабочая последняя сборка OpenCV в вашей системе.

person avtomaton    schedule 19.11.2014
comment
Мне помогло сборка ffmpeg из исходников вместо использования libav. - person afenster; 20.01.2015
comment
это именно то, что я предложил в своем ответе - person avtomaton; 21.01.2015
comment
Я получил это сообщение: Можно ли диаблировать yasm? гиазм/назм не обнаружен или слишком старый. Используйте --disable-yasm для увечной сборки. @автоматон - person MAS; 19.11.2016
comment
ОБНОВЛЕНИЕ @avtomaton: я попробовал, но получил ту же ошибку. я использую мак ос - person MAS; 19.11.2016
comment
@MAS, возможно, несовместимые версии opencv и ffmpeg. На Mac я предпочитаю brew или port для установки ffmpeg вместо компиляции из исходников - должно работать с последней версией opencv (3.1). Если вы предпочитаете компилировать из исходников, внимательно проверьте версии ffmpeg и opencv и их совместимость. Исходный вопрос актуален для Ubuntu 14.10, где сопровождающие по какой-то причине удалили ffmpeg из репозиториев. - person avtomaton; 21.11.2016

Можно попробовать собрать без ffmpeg:

cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_FFMPEG=OFF ..
make
sudo make install
person Eugene    schedule 05.02.2015
comment
Без ffmpeg вы, возможно, получите версию без чтения и записи видео - это нормально, только если вы не используете их в своих проектах. - person avtomaton; 10.08.2015