debian9 安装 opencv:
安装前先增加国内apt源,增加安装速度;
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
修改更新源,可以增加国内163,清华,中科大,上海交大、华为、腾讯,阿里的国内源
sudo vi /etc/apt/sources.list
如: buster是debian版本, main是符合开源标准的主包 contrib引用了没有开源协议的包 non-free是不符合开源协议包
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian buser-updates main non-free contrib
deb http://mirrors.163.com/debian-security buster/updates main non-free contrib
修改完后要执行sudo apt update 更新本地库信息
更新时,可能会提示没有公匙,无法验证数字签名,可以使用命令:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <提示公匙>
有可能提示gpg失败,那可以使用以下命令(curl发送http命令,并将返回结果在标准输出设备上输出,通过管道转给apt本地key库):
curl -sL "http://keyserver.ubuntu.com/pks/lookup?search=<提示的公匙>&op=get" | sudo apt-key add
sudo apt-get install cmake git
sudo apt-get install libgtk2.0-dev
sudo apt-get install 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
安装一系列的图像和视频操作库,对以后的操作非常重要!
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
安装GTK警告信息过滤器,会减少令人讨厌的警告:
sudo apt-get install libcanberra-gtk*
星号*表示自动获取对应树莓派ARM架构的版本
安装OpenCV优化数据的库
sudo apt-get install libatlas-base-dev gfortran
安装Python3开发相关的库
sudo apt-get install python3-dev
sudo apt-get install libjasper-dev libjasper1
安装HDF5和QT库
sudo apt-get install libhdf5-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev
sudo apt-get install libqtgui4
sudo apt-get install libqt4-test
安装依赖包时,通常会出现libjasper1,libjasper-dev 定位不了,增加国内apt源,执行
sudo apt-get update ,更新后也经常不起作用。
最后从中科大的镜像网站上找到了此文件,本来一直按【libj】目录去找,总也找不到,结果它在[J]的目录下。找到后就好办了,下载下来.
下载后, 解压缩:(z 支持gzip格式,x提取文件,f指定文件名)
tar -zxf <解压文件>
在linux上,用sudo dpkg -i libjasper-dev_1.900.1-debian1-2.4+deb8u3_amd64.deb安装即可
# 从github上clone代码库,增加--branch直接下载指定版本,可以减少下载量,但有可能会少文件,编译时发现缺少的文件,增加 --depth=1只下载最后一版更新,以前的更新不要
git clone --branch 3.2.0 --depth=1 https://github.com/opencv/opencv.git
git clone --branch 3.2.0 --depth=1 https://github.com/opencv/opencv_contrib.git
github下载比较慢,可以用gitee下载:
https://gitee.com/mirrors/opencv.git
https://gitee.com/mirrors/opencv_contrib.git
cmake -D CMAKE_BUILD_TYPE=RELEASE -DENABLE_PRECOMPILED_HEADERS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..
执行make时出错:
(1)编译时下载ippicv出现md5检查和错误,下载过程中出现的错误,可以手工下载,或者多试几次。
(2)编译时报错:
Building CXX object /home/xy2/tools/opencv-3.3.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1557:21:error: ‘CODEC_FLAG_GLOBAL_HEADER’ was not declared in this scope
c->flags |= CODEC_FLAG_GLOBAL_HEADER;
解决方案是用 grep命令查找丢失的define 定义, 用grep -r 在ffmpeg目录下查找,在 libavcodec/avcodec.h中找到;
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
拷贝到以下文件最前面::
opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp
(3)编译错误:
/usr/local/include/c++/6.2.0/cstdlib:75:25: fatal error: stdlib.h: No such file or directory #include_next
在编译命令上增加 -DENABLE_PRECOMPILED_HEADERS=OFF
cmake -D CMAKE_BUILD_TYPE=RELEASE -DENABLE_PRECOMPILED_HEADERS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..
这个错误是在编译opencv/modules/python/src2/cv2.cpp文件是错
用vi ~/opencv/modules/python/src2/cv2.cpp
可以用命令:/PyString_AsString(obj) 来搜素,这是一个函数:
bool pyopencv_to(PyObject* obj, String& value, const char* name)
{
(void)name;
if (!obj || obj == Py_none)
return true;
char* str = (char*)PyString_AsString(obj); //在此行函数返回值前增加 (char*)
if (!str)
return false;
value = String(str);
return true;
}
最后编译成功。
后续工作:
(1)、在终端执行下面命令,实际是将opencv库放到系统的库中:
sudo make install
(2)、配置openCV参数设置
在/etc/ld.so.conf.d目录下创建opencv.conf,加入/usr/local/lib
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
(3)因为opencv创建在当前用户下的,所以不要修改系统shell/etc/bash.bashrc
而是修改 vi ~/.bashrc
增加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
让bashrc文件生效
source ~/.bashrc