Ubuntu 17.04系统下源码编译安装opencv的步骤详解
<p><span><strong>前言</strong></span></p>
<p>
本文主要针对ubuntu 17.04版本下,opencv进行源码编译安装。开发环境主要针对python 对 opencv库的调用。下面话不多说了,来一起看看详细的介绍:</p>
<p>
<span><strong>一、安装 gcc cmake 编译环境</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_363000">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">build-essential pkg-config cmake cmake-gui</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
本文提供两种源码编译方式,一种是cmake命令,另一种是通过图形界面的cmake-gui进行编译</p>
<p>
该版本系统ubuntu已经自带python 2.7 和 python 3.5 ,需安装 pip 对python包进行管理</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_263904">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">python-pip</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">python3-pip</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
配置pip 清华源加速包下载更新速度(寻找飞一样的感觉)</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_734123">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">mkdir</code> <code class="bash plain">~/.pip</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">vim ~/.pip</code><code class="bash plain">/pip</code><code class="bash plain">.conf</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash comments"># 在pip.conf 中添加以下内容</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain"></code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">index-url = https:</code><code class="bash plain">//pypi</code><code class="bash plain">.tuna.tsinghua.edu.cn</code><code class="bash plain">/simple</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">[</code><code class="bash functions">install</code><code class="bash plain">]</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">trusted-host=mirrors.aliyun.com</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<span><strong>二、安装python 以及 python3 下的数据分析包</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_819548">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">pip </code><code class="bash functions">install</code> <code class="bash plain">numpy scipy matplotlib scikit-image scikit-learn </code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">pip3 </code><code class="bash functions">install</code> <code class="bash plain">numpy scipy matplotlib scikit-image scikit-learn</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<span><strong>三、安装其他依赖</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_128002">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments"># git : 版本控制</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash comments"># gfortran fortran编译器</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash comments"># yasm 汇编编译器</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash comments"># ffmpeg 系统自带</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">checkinstall yasm gfortran git ffmpeg</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libxvidcore4 libgtk-3-dev</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libjpeg8-dev libjasper-dev </code>
</div>
<div class="line number8 index7 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libtiff5-dev</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libxine2-dev libv4l-dev</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libqt4-dev libgtk2.0-dev libtbb-dev</code>
</div>
<div class="line number12 index11 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libatlas-base-dev</code>
</div>
<div class="line number13 index12 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libfaac-dev libmp3lame-dev libtheora-dev</code>
</div>
<div class="line number14 index13 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libvorbis-dev libxvidcore-dev</code>
</div>
<div class="line number15 index14 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libopencore-amrnb-dev libopencore-amrwb-dev</code>
</div>
<div class="line number16 index15 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">x264 v4l-utils</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<span><strong>四、可选依赖</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_326211">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libprotobuf-dev protobuf-compiler</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libgoogle-glog-dev libgflags-dev</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">libgphoto2-dev libeigen3-dev libhdf5-dev doxygen</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<span><strong>五、下载并且安装opencv3</strong></span></p>
<p>
安装git</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_596740">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">git</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
下载opencv3</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_231809">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">git clone https:</code><code class="bash plain">//github</code><code class="bash plain">.com</code><code class="bash plain">/opencv/opencv</code><code class="bash plain">.git</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
下载opencv_contrib</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_351020">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">git clone https:</code><code class="bash plain">//github</code><code class="bash plain">.com</code><code class="bash plain">/opencv/opencv_contrib</code><code class="bash plain">.git</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
opencv 从 3.0 开始,就将一部分内容(比如 sift 等)分离到 opencv_contrib 中。因此,要完整安装 opencv,还需要安装 opencv_contrib。</p>
<p>
命令编译</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_465818">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">cd</code> <code class="bash plain">opencv</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">mkdir</code> <code class="bash plain">build</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash functions">cd</code> <code class="bash plain">build</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">cmake -d cmake_build_type=release \</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash spaces"> </code><code class="bash plain">-d cmake_install_prefix=</code><code class="bash plain">/usr/local</code> <code class="bash plain">\</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash spaces"> </code><code class="bash plain">-d install_c_examples=on \</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash spaces"> </code><code class="bash plain">-d install_python_examples=on \</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash spaces"> </code><code class="bash plain">-d with_tbb=on \</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash spaces"> </code><code class="bash plain">-d with_v4l=on \</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash spaces"> </code><code class="bash plain">-d with_qt=on \</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash spaces"> </code><code class="bash plain">-d with_opengl=on \</code>
</div>
<div class="line number12 index11 alt1">
<code class="bash spaces"> </code><code class="bash plain">-d opencv_extra_modules_path=../..</code><code class="bash plain">/opencv_contrib/modules</code> <code class="bash plain">\</code>
</div>
<div class="line number13 index12 alt2">
<code class="bash spaces"> </code><code class="bash plain">-d build_examples=on ..</code>
</div>
<div class="line number14 index13 alt1">
<code class="bash comments"># 查看cpu 核心数</code>
</div>
<div class="line number15 index14 alt2">
<code class="bash plain">nproc</code>
</div>
<div class="line number16 index15 alt1">
<code class="bash comments"># 如果你有8个核心 </code>
</div>
<div class="line number17 index16 alt2">
<code class="bash comments"># 切换至 build 目录中,执行下面命令,编译源码并链接生成相应的动态库以及可执行文件</code>
</div>
<div class="line number18 index17 alt1">
<code class="bash functions">make</code> <code class="bash plain">-j8</code>
</div>
<div class="line number19 index18 alt2">
<code class="bash comments"># 执行完成后,再执行以下命令,将生成的可执行文件以及动态库安装到指定的安装目录中。</code>
</div>
<div class="line number20 index19 alt1">
<code class="bash functions">sudo</code> <code class="bash functions">make</code> <code class="bash functions">install</code>
</div>
<div class="line number21 index20 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">sh -c </code><code class="bash string">'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'</code>
</div>
<div class="line number22 index21 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">ldconfig</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
用图形化工具配置生成 makefile</p>
<p>
切换至 opencv 目录,然后新建一个目录,用于存放 cmake 生成的配置文件。</p>
<p>
<code>mkdir build</code></p>
<p>
<code>cd build</code></p>
<p>
在你的图形界面的软件中找到 cmake-gui 打开</p>
<p>
然后在 where is the source code 中添加 opencv 的目录路径,在 where to build the binaries 中添加刚才新建的 build 目录</p>
<p>
然后点击下面的configure,选择 unix makefiles,然后选择 default ...。点击 ok,从而处理 opencv目录下的 cmakelists.txt 。并且在 build 目录下生成 cmakecache.txt 及 makefile 等相关文件。</p>
<p>
configure配置结束后,将会出现类似以下配置界面</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Ubuntu 17.04系统下源码编译安装opencv的步骤详解" alt="Ubuntu 17.04系统下源码编译安装opencv的步骤详解" src="https://zhuji.jb51.net/uploads/img/202305/1950c10ada0e6aeb2f49754430440d8a.jpg"></p>
<p>
以下是需要修改的部分</p>
<ul>
<li>
cmake_build_type 修改为 release</li>
<li>
opencv_extra_modules_path 设为 opencv_contrib 中的 modules 目录的路径(比如,/home/arvin/opencv_contrib/modules)</li>
<li>
在 build_examples 的复选框里 打勾</li>
<li>
在 install_c_examples 的复选框里 打勾</li>
<li>
在 install_python_examples 的复选框里 打勾</li>
<li>
在 with_ffmpeg 的复选框里 打勾</li>
<li>
在 with_gtk 的复选框里 打勾</li>
<li>
在 with_v4l 的复选框里 打勾</li>
<li>
在 with_tiff 的复选框里 打勾</li>
<li>
在 with_png 的复选框里 打勾</li>
<li>
在 with_jpeg 的复选框里 打勾</li>
<li>
在 with_jasper 的复选框里 打勾</li>
<li>
取消 with_cuda 的复选框里的勾</li>
<li>
取消 with_cufft 的复选框里的勾</li>
</ul>
<p>
然后点击configure,应用刚才的修改并且将修改内容更新至 build 目录下的 cmakecache.txt 中。然后点击 generate,更新 makefile。</p>
<p>
安装opencv3 及 opencv3 的额外包</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_99850">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">cd</code> <code class="bash plain">opencv</code><code class="bash plain">/build/</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_543269">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">make</code> <code class="bash plain">-j8</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_99201">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash functions">make</code> <code class="bash functions">install</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_693746">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">ldconfig</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
测试环境是否配置成功</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_820781">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments"># 在命令行打开你的python 解释器,输入以下命令</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">import</code> <code class="bash plain">cv2 </code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">print cv2.__version__</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash comments"># 若看到类似以下输出,则表示配置成功</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash string">'3.3.0-dev'</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<span><strong>总结</strong></span></p>
<p>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
原文链接:http://www.jianshu.com/p/5545f6c322f8</p>
頁:
[1]