Linux下OpenCV的安装
1.cmake以及相关依赖库的安装
因为OpenCV2.2版本之后,需要用cmake来生成Makefile文件,因此在安装OpenCV之前,要安装cmake以及cmake依赖库。
终端输入:apt-get install cmake
apt-get install build-essential libgtk2.0-dev libavcodec-dev
libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
安装完成后输入:cmake -version检查cmake是否安装成功
2.opencv的安装
我们都知道,在linux下安装第三方软件时要用到第三方软件的头文件以及相关库,在编译安装时指定库和头文件是十分麻烦的,而pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用。因此我们可以安装pkg-config来减轻工作量。
终端输入:apt-get install pkg-config
OpenCV的下载地址为:http://www.opencv.org.cn/index.php/Download
之后将文件通过VMware的共享文件夹将文件发送到linux下
进入共享文件夹,将文件复制到指定目录
终端输入:cp opencv-3.3.0.zip /nfsroot/opencv
进入实验目录/nfsroot/opencv进行OpenCV的安装
终端输入:unzip opencv-3.3.0.zip
解压完成后将在改目录下生成opencv-3.3.0目录
进入该目录,新建一个目录进行OpenCV的编译目录(否则会报以下错误)
终端输入:mkdir build
cd bulid
cmake ..
发现不能执行,并且报错情况如下:
这是提示我们需要Cmake 2.8.12.2或更高版本的Cmake,当前版本为2.8.7
因此我们需要下载更高版本的Cmake(安装教程在后面)
进入OpenCV的安装目录/nfsroot/opencv/opencv-3.3.0/build
终端输入:cmake ..
如果执行过程中遇到:CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
需要安装g++,终端输入:apt-get install g++
执行完毕后终端输入:make -j4
(在多核宿主机上,可以通过-j选项来提高make命令的执行速度,单核机器就不要尝试了)
输入make install
等make install执行完毕之后,需要对环境变量进行配置
终端输入:vim /etc/ld.so.conf.d/opencv.conf
在文件末尾添加:/usr/local/lib(可能是空文件)
配置环境变量
终端输入:vim /etc/bash.bashrc
在文件末尾添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
配置完成后重新打开终端,使得配置生效
4.opencv的测试
终端输入:ldconfig -v | grep opencv
检查opnecv是否安装成功
在/home目录下创建test.cpp
内容如下:
#include "highgui.h"
#include "opencv2/opencv.hpp"
#include <iostream>
#define Usage() \
{ std::cerr << "Usage: ./showpic FILE" << std::endl; }
//using namespace cv;
int main(int argc, char** argv)
{
if (argc != 2) Usage();
IplImage* img = cvLoadImage(argv[1]);
cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
cvShowImage("Example1", img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Example1");
}
终端输入:g++ test.cpp `pkg-config --libs --cflags opencv` -o a.out
进行编译之后,在该目录下复制过来一个.jpg格式的图片文件
终端输入./a.out ./1.jpg(图片名)
成功执行后将会出现一个窗口显示图片
如果执行之后,提示错误如下:
error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function ‘cvNamedWindow’
则表示显示窗口有问题,解决方法如下:apt-get install libgtk2.0-dev pkg-config
安装完毕后,需要重新运行cmake对opencv源码进行编译安装
下载更高版本的Cmake
终端输入:apt-get autoremove cmake,卸载Cmake
apt-get install build-essential
wget http://www.cmake.org/files/v3.12/cmake-3.12.3.tar.gz
执行过程中,系统提示:
错误: 没有匹配的证书主体别名 (Subject Alternative Name)。
请求的主机名为 “cmake.org”。
要以不安全的方式连接至 cmake.org,使用“--no-check-certificate”。
因此在wget http://www.cmake.org/files/v3.12/cmake-3.12.3.tar.gz后加上该指令
之后便将cmake-3.12.3.tar.gz保存到当前目录
在/usr/local目录下新建cmake目录,用来安装cmake
终端输入cp cmake-3.12.3.tar.gz /usr/local/cmake,将文件拷贝到指定目录
进入该目录,终端输入:tar xzvf cmake-3.12.3.tar.gz,将文件解压到当前文件夹
终端输入:./configure
make
make install
执行完毕后输入:cmake -version查看cmake版本
假如在执行./configure时遇到错误提示:
Cannot find appropriate C++ compiler on this system.
Please specify one using environment variable CXX.
See cmake_bootstrap.log for compilers attempted.
---------------------------------------------
Log of errors:
/home/ltu/Downloads/cmake-3.1.0/Bootstrap.cmk/cmake_bootstrap.log
这是提示系统缺少g++,如果你没有安装g++,终端输入:apt-get install g++
如果你已经安装了g++,仍然收到这个提示,请更换cmake压缩包版本
例如:本人更换到cmake-3.2.2,无错误提示
下载链接:http://www.cmake.org/files/v3.2/cmake-3.2.2.tar.gz
cmake环境的配置
成功安装cmake之后,需要配置环境变量才能成功运行cmake
终端输入:vim /etc/profile
在文件末尾加上:
export PATH=$PATH:/home/uptech/cmake/cmake-3.2.2/bin
(请根据个人安装路径更改)
之后终端输入:source /etc/profile使得配置生效
OpenCV的安装可能遇到的问题
make执行过程中提示错误信息:
/usr/bin/ld: CMakeFiles/opencv_imgproc.dir/src/resize.cpp.o: relocation R_386_GOTOFF against undefined symbol `void (anonymous namespace)::hlineResize<int, (anonymous namespace)::fixedpoint64, 2, true>(int*, int, int*, (anonymous namespace)::fixedpoint64*, (anonymous namespace)::fixedpoint64*, int, int, int)' can not be used when making a shared object
/usr/bin/ld: final link failed: Bad value
这个错误提示是因为gcc的问题,可以尝试安装libstdc++
但是终端输入:ap-get install libstdc++时却出现
E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
这是软件更新源的问题
解决方法:
打开更新管理器
在设置中找到软件更新栏
选择重要安全更新和推荐更新
在其它软件选项卡中去掉有问题的源
之后点击安装更新或者终端输入:apt-get update进行手动更新