近期做一个嵌入式项目,可能会涉及到图像处理这方面的内容,因此决定先在Ubuntu上安装一个OpenCV试试水,顺便我这个Linux小白也学学Linux这个系统,在看了网上很多相关教程之后,终于摸索出了安装方法。
OpenCV官网提供了源码,因此在这里我选择使用较为普遍的 源码+cmake这种安装方式。
安装前的一些依赖库准备
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
安装
1、首先从OpenCV官网下载源码的压缩包opencv-3.2.0.zip,然后把它解压
sudo unzip ~/Downloads/opencv-3.2.0.zip -d ~/
2、进入opencv文件夹,新建build文件夹编译用
cd ~/opencv-3.2.0
mkdir build
cd build
3、接下来我们需要使用cmake编译整个OpenCV,CMakeFile附带在压缩包中不需要自己去写(谢天谢地),最后那两个点不能省,否则目录不正确,无法完成编译。
嗯,可以去掉试一试。
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
安装过程中需要它会下载一个ippicv_linux_20151201.tgz,这个能不能成看网速+脸,网速好脸白当然最好,网不好脸黑也不怕,可以百度一下这个包,手动安装,我没手动安就不胡说了,网上有教程可以参考一下。
4、接下来就是编译,安装。因为安装需要更高的权限,所以说记得加sudo。这个make比较占时间,网上说-j可以多线程加速,不过貌似有的电脑加了-j用不成GG,就没试。
make
sudo make install
网上好多教程到这就结束安装,开始测试了,我当时也是满怀希望的写了HelloWorld.cpp编译了一下,然后各种undefined reference,Linux小白肝了一阵重装也是不行,后来发现其实是链接库的问题。
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
搞定,测试。
测试
先运行一下cv库自带的测试程序(opencv-3.2.0/samples)
cd ~/opencv-3.2.0/samples/cpp/tutorial_code/introduction/display_image
./display_image ~/opencv-3.2.0/samples/data/lena,jpg
没问题的话Lena的照片会显示出来嗯,看到她我就莫名开心,因为至少OpenCV应该是可以用了,然后我们再来写一个自己的程序试试。
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <string>
using namespace std;
using namespace cv;
int main(int argc, char **argv) {
// 读取图片
Mat img = imread(argv[1])
// 创建一个窗口
namedWindow("display window", WINDOW_AUTOSIZE);
// 在窗口里显示该图片
imshow("display window", img);
// 等待键盘输入
waitKey(0);
return 0;
}
存到CVTEST.cpp里,我们依旧使用cmake编译。因为我真的是一个Windows下长大的Linux小白,写CMakeLists.txt也折腾我了一阵,最开始仿照网上的CMakeLists改了一个
cmake_minimum_required(VERSION 2.8)
project( CVTEST )
find_package( OpenCV REQUIRED )
add_executable( CVTEST CVTEST.cpp )
target_link_libraries( CVTEST ${OpenCV_LIBS} )
存好然后编译
cmake .
make
但怎奈脸太黑,make完又是各种undefined reference,链接又炸了,很无奈(哭晕在厕所)。之前我们能看到Lena小姐姐,说明我们OpenCV大体上安装应该没问题,所以说出问题应该在CMakeLists上,于是我参考了一下sample里面的CMakeLists,发现了这么一句:
ocv_target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${OPENCV_CPP_SAMPLES_REQUIRED_DEPS})
哎?OPENCV_LINKER_LIBS不就是我们需要的链接库嘛,,于是在自己的CMakeLists里加上OPENCV_LINKER_LIBS
cmake_minimum_required(VERSION 2.8)
project( CVTEST )
find_package( OpenCV REQUIRED )
add_executable( CVTEST CVTEST.cpp )
target_link_libraries( CVTEST ${OpenCV_LIBS} ${OPENCV_LINKER_LIBS} )
然后再编译
cmake .
make
直接过,把我们的Lena小姐姐照片或者其他什么照片复制过去然后运行,应该可以看到照片,至此我们的安装结束。
总之OpenCV3.2就这么稀里糊涂地装过来了,中间还有好多不解的地方留待以后慢慢研究。