最近研究一个项目时需要用到OpenCV,于是自己尝试在Ubuntu 14.04系统下安装了这个开发环境。下面就将具体的过程记录一下,便于后期查阅和同行分享。
首先介绍一下我的开发环境:
首先,需要在你的机器上安装一系列必要的工具,包括:
sudo apt-get update # 这是为了更新你的软件源
sudo apt-get install build-essential # 这是为了安装编译所需的库
sudo apt-get install cmake pkg-config git # 这是为了安装一些必要的工具
sudo apt-get install libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libtiff4.dev libswscale-dev libjasper-dev libdc1394-22-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
然后,你可以去网上下载OpenCV的源码,我是采取git仓库克隆的方式,直接获取最新的版本,如下:
git clone https://github.com/opencv/opencv
源码下载完成后,进入该目录下,执行以下语句:
cd opencv
mkdir build
cd build
这是为了在源码的根目录下建立一个临时目录,用于存放编译所产生的文件,不至于污染源码,使得你的源码可以根据不同的配置命令分别编译出多份可执行文件,每一份都很清晰,不至于混在一起。这个思路,有一个很官方的名字叫OUT SOURCE BUILD,意思就是在代码之外的地方进行编译。而与其相对的,就是IN-SOURCE BUILD,意味在代码内进行编译。所以,如果你不按照我上面的步骤新建一个目录然后到目录里面去编译的话,系统就会给出一个提示说“In-source builds are not allowed.”,这里就不截图了。
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install
说明一下:
打开文件进行编辑:
sudo vi /etc/ld.so.conf.d/opencv.conf
输入下面的内容,然后保存退出
/usr/local/lib
打开文件进行编辑:
sudo vi /etc/profile
在末尾加入:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
更新环境变量:
sudo source /etc/profile
登出,或者重启,然后输入命令:
pkg-config --modversion opencv # 查看linux下的opencv安装版本(注意中间是两个横线)
4.0.0
如果没有出错,说明安装成功。
完成了上述的所有步骤,就已经万事俱备,只欠东风了。下面我们就开始进行验证测试。
进入opencv的源码目录,里面有一个sample/cpp/example_cmake的子目录,里面有一个很简单的例程,我们就用这个例程来进行演示:
cd opencv/samples/cpp/example_cmake/
cmake . # 请注意,这里的cmake后有一个空格,然后是一个点号
make
编译成功了,运行一下试试:
leon@Ubuntu:~/opencv/samples/cpp/example_cmake$ ./opencv_example
Built with OpenCV 4.0.0-dev
(opencv_example:13315): GStreamer-CRITICAL **: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed
VIDEOIO ERROR: V4L: can't open camera by index 0
No capture
图像如下:
这是因为我的是虚拟机,没有摄像头,因此显示了黑屏。这一点在上面的输出提示信息中也可以看到。如果你的是物理机,也有摄像头,那么就会显示出摄像头的画面并叠加上hello opencv的提示语句。
到此,所有工作全部顺利完成!恭喜!
如果刚才配置编译和安装目录的时候,没有设置为缺省的“/usr/local”目录, 而是设置了其他的目录(比如/usr/local/opencv-4.0.0这个目录),则有可能会在后面在应用的过程中遇到一个问题,就是使用cmake命令编译某个工程项目时,提示说:
CMake Error at CMakeLists.txt:39 (find_package):
By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "OpenCV", but
CMake did not find one.
Could not find a package configuration file provided by "OpenCV" with any
of the following names:
OpenCVConfig.cmake
opencv-config.cmake
Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
provides a separate development package or SDK, be sure it has been
installed.
原因就是因为安装opencv时没有使用的默认的路径,导致cmake找不到opencv。解决方法也很简单,执行cmake命令前,先输入下面的语句:
export OpenCV_DIR=/usr/local/opencv-4.0.0 # 这里的/usr/local/opencv-4.0.0目录就是你安装的实际目录
然后再执行cmake命令,就可以了!