Debian 安装opencv3过程,排除编译出错

debian9 安装 opencv:

1、安装依赖包:

安装前先增加国内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安装即可

2、下载opencv包

# 从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

3、cmake编译

cmake  -D CMAKE_BUILD_TYPE=RELEASE  -DENABLE_PRECOMPILED_HEADERS=OFF     -D CMAKE_INSTALL_PREFIX=/usr/local ..

4、make编译连接

执行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/build/modules/python3/opencv_python3.dir/__/src2/cv2.cpp.o 错误1

这个错误是在编译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;

}

最后编译成功。

5、安装和环境配置

后续工作:

(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

你可能感兴趣的:(linux,opencv,python)