源码准备
- 下载源码,opencv官网,得到 .zip的压缩文件(默认在~/Downloads下),
- 进入Downloads文件下,解压文件到用户目录下(自己随意) ,unzip opencv-3.1.0.zip -d …/
安装依赖
- 有一点需要说明的是,opencv有很多依赖库,根据自己需要安装,缺少依赖库会影响他的部分功能(有的可能你本来也用不到,根据自己需求,以后需要也可以再重新安装依赖),opencv会在cmake阶段检测依赖项,并调整自己功能。
- 安装依赖(有的是可选的,根据自己需求)
# Build tools:
sudo apt-get install -y build-essential cmake
#GUI
sudo apt-get install -y libvtk5-dev libgtk2.0-dev
# Media I/O:
sudo apt-get install -y libtiff5-dev libjasper-dev libopenexr-dev libgdal-dev zlib1g-dev libjpeg-dev libwebp-dev libpng-dev
# Video I/O:
sudo apt-get install -y libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev yasm libopencore-amrnb-dev libopencore-amrwb-dev libv4l-dev libxine2-dev
# Parallelism and linear algebra libraries:
sudo apt-get install -y libtbb-dev libeigen3-dev
#python
python-dev python-numpy
安装libtiff4-dev的时候,提示没有相应的包,但是有 libtiff5-dev代替,我就用其代替了(导致后面问题)。
编译、安装
- 进入opencv-3.1.0目录,执行 :
mkdir build
cd build
sudo cmake ..
如果正常会出现:检查哪些功能安装,哪些没有
但是我在执行cmake的时候出现:ICV: Downloading ippicv_linux_20151201.tgz 下载超时不要慌,先喝口水冷静一下,回来之后,点击ippicv_linux_20151201.tgz手动下载,下载完后替换opencv-3.1.0/3rdparty/ippicv/downloads/linux-*目录下的同名文件,重新cmake。这会我是成功的,如果还没成功,自行百度吧,谁都是这么过来的。
- 接着在bulid目录下执行
sudo make
- 如果在make阶段出错,报类似错误:
usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFScanlineSize@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference
是因为找不到 libtiff4-dev 我们在安装的过程中换成 libtiff5-dev 。所以我们手动安装
cd $HOME/Downloads
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/t/tiff3/libtiff4_3.9.7-2ubuntu1_amd64.deb
sudo dpkg -i libtiff4_3.9.7-2ubuntu1_amd64.deb
sudo ldconfig
- 接下来再重新
sudo cmake ..
接着sudo make
如果还没有解决刚才的问题,那可能是和你以前安装其他的依赖冲突(我也是),比如我以前安装 anaconda,所以opencv在cmake的时候,有的依赖使用anaconda里面的包,像tiff的包,用的就是anaconda的,如下图:
然后我就将anaconda的环境变量删除,我当时添加的是全局,所以在/etc/profile里面,删了之后再cmake,就变成下面的了。
- 再重新编译
make -j5
这次启用5个线程,更快(已经折腾不起时间了)
如果顺利的话会成功,如下图,其中可能会有警告,没关系(能安装就谢天谢地)。如果还不成功,自行百度吧。
- 最后一步:
sudo make install
恭喜你,已经完成艰巨的任务,听首歌奖励一下自己。
测试一下
main.cpp
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
using namespace std;
int main(void)
{
Mat image;
image = imread("lena.jpeg");
namedWindow("display_image");
imshow("display_image",image);
waitKey();
return 0;
}
CMakeList.txt
cmake_minimum_required(VERSION 3.5)
project(my_test)
set(CMAKE_CXX_FLAGS "-std=c++11")
#如果需要版本控制,有其他opencv版本安装在/opt/opencv-2.4.11文件夹下需要加上
#set(OpenCV_DIR /opt/opencv-2.4.11/share/OpenCV)
find_package(OpenCV REQUIRED) #根据OpenCV作为前缀自动去/usr/local/share/OpenCV(如果你的opencv安装时,默认前缀设置为:/usr/local时)文件夹中去找OpenCVConfig.cmake,OpenCV-config.cmake 两个文件,进而确定你要引入的opencv头文件和库函数在哪里
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(include) #我自己头文件目录
aux_source_directory(src DIR_SRCS)#自己的源文件目录
add_executable(my_test ${DIR_SRCS})
target_link_libraries(my_test ${OpenCV_LIBS})# OpenCV_LIBS变量是OpenCVConfig.cmake定义好的,直接用即可
运行结果:显示lena图像