一顿操作猛如虎 發表於 2023-6-18 00:00:00

Ubuntu中Opencv的安装使用教程

<p>
        <span><strong>前言</strong></span></p>
<p>
        OpenCV为基于BSD许可(开源)发行的跨平台计算机视觉库,可运行在Linux、Windows和Mac OS上。它轻量级而且高效,提供了Python、Ruby、MATLAB等语言接口,实现了图像处理和计算机视觉方面的很多通用算法。</p>
<p>
        OpenCV不仅在进行软件开发的过程中需要用到,而且他也是很多开源软件的运行依赖,所以安装一个Opencv就很有必要了,即使自己本身并不想学习使用。</p>
<p>
        <span><strong>安装</strong></span></p>
<p>
        以下主要是从百度上找到的可用方法:</p>
<p>
        <strong>安装运行依赖</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_515014">
                        <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 plain">$ </code><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 libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config\</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev \</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev\</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev \</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>下载源代码</strong></p>
<p>
        在 官网 下载适合的版本就好,我这下的是3.1.0。</p>
<p>
        下载完成解压就好。</p>
<p>
        <strong>编译</strong></p>
<p>
        编译还是有点麻烦的,现在都是用cmake结合make来编译,头一次用这个有点头大。</p>
<p>
        1、在文件目录下新建一个叫build/的文件夹,这个文件夹的目的主要是用来存放编译生成的临时文件。当然起别的名字也可以。</p>
<p>
        2、进入build/文件夹,输入以下命令</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_318276">
                        <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="plain plain">cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON  -D WITH_XINE=ON  -D WITH_OPENGL=ON  -D WITH_TBB=ON  -D BUILD_EXAMPLES=ON  -D BUILD_NEW_PYTHON_SUPPORT=ON  -D WITH_V4L=ON ..</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        其实就是cmake命令后加些配置参数,最后是CMakeLists.txt配置文件的位置,这个位置当然就是../</p>
<p>
        3、编译安装,输入<code>make -j $(nproc)</code> (这是多进程make的命令,<code>\$(nproc)</code>就是进程数,当然也可以直接指定),这会花很长时间,最后再<code>$ sudo make install </code>,对文件进行安装。</p>
<p>
        4、最后还要配置一些路径,输入以下命令</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_734939">
                        <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="plain plain">/bin/bash -c 'echo "/usr/local/lib" &gt; /etc/ld.so.conf.d/opencv.conf'</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        然后再ldconfig即可。(注意给权限)</p>
<p>
        5、最后可以用如下命令来判断是否安装成功</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_680077">
                        <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">pkg-config --modversion opencv</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">pkg-config --cflags opencv</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>测试</strong></span></p>
<p>
        OpenCV在codeblock下可以通过加链接库的形式编译运行。但是如果在命令行下,就得手写cmake了。</p>
<p>
        为了方便测试,我们新建一个test文件夹,在这下面写一个测试程序。</p>
<p>
        <strong>首先新建如下文件,保存为test.cpp</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_780432">
                        <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>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">#include&lt;opencv2/highgui.hpp&gt;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">#include&lt;opencv2/imgproc.hpp&gt;</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain plain">using namespace cv;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain plain">int main(int argc ,char** argv){</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">if(argc!=2){</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">printf("No image data\n");</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">return -1;</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">}</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">char *imageName=argv;</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">Mat image;</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">image=imread(imageName,1);</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">if(!image.data){</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">printf("No iamge data\n");</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">return -1;</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">}</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">namedWindow(imageName,CV_WINDOW_AUTOSIZE);</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">imshow(imageName,image);</code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">waitKey(0);</code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">return 0;</code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="plain plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>然后随便把一个测试用图片复制到test文件夹下,我用的是他自带的最经典的lena.jpg。</strong></p>
<p>
        接着编写cmake配置文件,将下面的文件保存为CMakeLists.txt</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_102852">
                        <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>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">project(test)</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">add_executable(test test.cpp)</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain plain">find_package(OpenCV REQUIRED)</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain plain">target_link_libraries(test ${OpenCV_LIBS})</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        里面用到的各种文件的意义也很清楚了,以后照着改就行。</p>
<p>
        最后在test下新建build文件夹,进入后输入<code>cmake ../ </code>即可完成cmake编译,然后再输入make即可生成可执行文件。</p>
<p>
        找到test文件,然而在命令行下输入<code>./test ../lena.jpg </code>即可运行程序。</p>
<p>
        <span><strong>总结</strong></span></p>
<p>
        以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
        原文链接:https://blog.mythsman.com/2016/02/11/1/</p>
頁: [1]
查看完整版本: Ubuntu中Opencv的安装使用教程