在Ubuntu 14.10中安装OpenCV

在Ubuntu 14.10中安装OpenCV,opencv,ubuntu,ubuntu-14.10,Opencv,Ubuntu,Ubuntu 14.10,我正试图在Ubuntu14.10中安装OpenCV。 我安装了所有提到的依赖项,但当我试图运行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') } 就像我想的,所有的编解码器。 这

我正试图在Ubuntu14.10中安装OpenCV。 我安装了所有提到的依赖项,但当我试图运行
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。我应该如何解决这些问题?

除非您有特殊原因,否则我建议安装已经在Ubuntu存储库中的OpenCV:
sudo-apt-get-install-libopencv-dev


对于视频编解码器,我建议您只需尝试安装所有与ffmpeg和gstreamer相关的编解码器软件包。

在大多数情况下,从Ubuntu存储库安装OpenCV是一个不错的选择,但有时您需要自己从源代码构建OpenCV

例如,如果您需要OpenCV的非免费功能,或者希望对此项目做出贡献(您应该使用最新版本创建pull请求),或者希望更改某些内容(是的,OpenCV也可能包含bug)

可能的解决方案是构建ffmpeg(相当简单)——我真的不明白为什么Debian/Ubuntu在没有其他选择的情况下更喜欢libav

要安装ffmpeg,您应该从GIT存储库下载或克隆其源代码(git://source.ffmpeg.org/ffmpeg.git),然后输入源目录并运行

./configure--启用共享--禁用静态
制造
sudo制作安装

您还可以将其他参数添加到
configure
。 您也可以构建静态库,但OpenCV不能使用静态ffmpeg库构建(现在我不知道为什么)

在此之后,您可以从或克隆GitHub存储库()下载OpenCV源代码,创建构建文件夹并从中运行以下操作:

cmake PATH\u TO\u SOURCES-DCMAKE\u BUILD\u TYPE=发布
制造
sudo制作安装

当然,
PATH\u TO\u SOURCES
必须是指向OpenCV源的实际路径


完成这些步骤后,您将在系统中使用最新的OpenCV版本。

您可以尝试在不使用ffmpeg的情况下进行构建:

cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_FFMPEG=OFF ..
make
sudo make install

非常感谢。这比我想象的要容易得多。嗯,这不是一个解决办法。特别是如果有人需要Qt、CUDA、OpenNI。在ubuntu14.10中,libav使用的是API版本11。OpenCV仍然使用Ubuntu14.04 LTS中包含的API版本9。我认为他们必须为它提供一个补丁,从源代码构建ffmpeg,而不是使用libav。这正是我在回答中的建议。我得到了这个信息:可以破坏yasm吗?hyasm/nasm未找到或太旧。使用--为残废的构建禁用yasm@avtomaton@avtomaton更新:我试过了,但我得到了同样的错误。我在用macos@MASopencv和ffmpeg的版本可能不兼容。在Mac上,我更喜欢
brew
port
来安装ffmpeg,而不是从源代码处编译-应该与最新的opencv(3.1)一起使用。如果您喜欢从源代码处编译,请仔细检查ffmpeg和opencv版本及其兼容性。最初的问题与Ubuntu14.10有关,因为某种原因,在Ubuntu14.10中,维护人员从存储库中删除了ffmpeg。没有ffmpeg,您可能会在不阅读和编写视频的情况下获得版本-只有在您的项目中不使用它们时才可以