我试图按照指示在Ubuntu 14.10中安装OpenCV。 我安装了所有提到的依赖关系,但是当我试图运行时,我得到这样的错误:
/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。 我该如何解决这些问题?
除非你有特殊的原因,否则我会建议安装已经在Ubuntu存储库中的OpenCV: sudo apt-get install libopencv-dev
对于视频编解码器,我建议简单地尝试安装所有与ffmpeg和gstreamer相关的编解码器软件包。
在大多数情况下,从Ubuntu存储库安装OpenCV是一个不错的选择,但是有时候您需要自己从源代码构建OpenCV。
例如,如果您需要OpenCV的非自由功能,或者想要为这个项目做出贡献(您应该使用最新版本来创建拉取请求),或者想要改变OpenCV(是的,OpenCV也可以包含错误)。
可能的解决方案是建立ffmpeg(这是相当简单的) – 我真的不明白为什么Debian / Ubuntu更喜欢没有替代的libav。
要安装ffmpeg,你应该从官方站点或克隆GIT仓库(git://source.ffmpeg.org/ffmpeg.git)下载它的源代码,然后进入源代码目录并运行
./configure –enable-shared –disable-static
使
sudo make install
您也可以添加其他参数进行configure
。 你也可以构建静态库,但是OpenCV不能用静态ffmpeg库来构建(现在我不知道为什么)。
在此之后,您可以从OpenCV站点下载OpenCV源代码或克隆GitHub存储库( OpenCV存储库 ),创建生成文件夹并从中运行以下内容:
cmake PATH_TO_SOURCES -DCMAKE_BUILD_TYPE =发布
使
sudo make install
当然, PATH_TO_SOURCES
必须是OpenCV源代码的实际路径。
完成这些步骤之后,您将在系统中使用最新的OpenCV版本。
你可以尝试建立没有ffmpeg:
cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_FFMPEG=OFF .. make sudo make install