ubuntu18.04下opencv4.4编译

目录

1、安装依赖项

2、源码安装

3、使用cmake gui编译

3、自定义安装

4、路径配置

4.1、设置扫描路径

4.2、设置python环境变量

4.3、添加Lib添加进环境变量

5、验证

6、卸载


系统环境:ubuntu18.04、opencv4.4.0。

        未使用cuda、dnn、opencv_contrib,配置环境变量的验证过程。

1、安装依赖项

step1、cmake gcc g++等系统工具

sudo apt-get install cmake gcc g++ build-essential pkg-config -y

step2、安装python2、python3支持模块

sudo apt-get install python-dev python-numpy -y # python2及对应numpy
sudo apt-get install python3-dev python3-numpy -y # python3及对应numpy

        一句话合并:

sudo apt-get install python-dev python-numpy python3-dev python3-numpy -y

step3、GTK支持(图形界面库)

# 安装gtk支持
sudo apt-get install libgtk2.0-dev -y # gtk2支持python2
sudo apt-get install libgtk-3-dev -y # gtk3支持python3

        一句话合并:

sudo apt-get install libgtk2.0-dev libgtk-3-dev -y

step4、图片支持库

sudo apt-get install -y libjpeg8-dev libjasper-dev libpng12-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev -y

        注意:若使用的是Ubuntu 16.04,可以安装libjasper-dev 以支持JPEG2000格式。

step5、安装gstreamer插件(视频解码)

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev -y

step6、其它库

sudo apt-get install qt-sdk libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjasper-dev libdc1394-22-dev -y 
sudo apt-get install libgtk2.0-dev libtbb-dev libatlas-base-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils

2、源码安装

        浏览器中下载:

opencv:https://codeload.github.com/opencv/opencv/zip/refs/tags/4.4.0

opencv_contrib:https://codeload.github.com/opencv/opencv_contrib/zip/refs/tags/4.4.0

        下载后,解压,opencv_contrib放置在opencv-4.4.0目录下。扩展包opencv_contrib根据需要下载。新建build目录,用于构建文件。对应目录组织结构如下:

ubuntu18.04下opencv4.4编译_第1张图片

# 新建build文件夹,存放构建文件
mkdir build
cd build

3、使用cmake gui编译

sudo apt-get install cmake-qt-gui

        进入目录,打开gui界面:

cd opencv-4.4.0 # 进入opencv源代码目录
mkdir build # 创建一个build文件夹,用于存放生成的代码
cd build
cmake-gui .. # 启动cmake-gui

        界面如下:

ubuntu18.04下opencv4.4编译_第2张图片

        点击configure,选择unix makefiles,再点finish完成一次configure。

ubuntu18.04下opencv4.4编译_第3张图片

        结果如下图,勾选grouped方便查看配置项:

ubuntu18.04下opencv4.4编译_第4张图片

        点击configure后,查看编译log,一般会有很多错误,依次处理。

3、自定义安装

        cmake时需要指定编译参数-DCMAKE_INSTALL_PREFIX为自己指定的目录,然后增加相应的设置:主要是设置扫描路径和设置环境变量。

step1、cmake参数配置

第一项:指定安装路径。完整安装至该目录

        CMAKE_INSTALL_PREFIX = "/usr/local/opencv440" # 指定安装路径

        自定义安装,执行sudo make install后,会安装到自定义目录的相应位置,譬如,自定义目录:/usr/local/opencv440 ,下文用OPENCV_DIR_PATH代表。则安装到以下位置:

  • /usr/local/opencv440/bin
  • /usr/local/opencv440/lib
  • /usr/local/opencv440/share
  • /usr/local/opencv440/inlcude

OPENCV_DIR_PATH=/usr/local/opencv440

        若未指定,默认路径为:

 

第二项:配置第三方库目录。(可选项, 使用常见功能,不选)

        OPENCV_EXTRA_MODULES_PATH = "/home/tools/opencv440/opencv-4.4.0/opencv_contrib-4.4.0" # 第三方库

勾选:

        PENCV_GENERATE_PKGCONFIG:生成opencv config文件,方便系统调用和查找。默认否。

可选项:

        WITH_CUDA:是否使用GPU。默认否。

        OPENCV_PYTHON3_VERSION:是否添加 进入python3。默认否。

        OPENCV_DNN_CUDA:是否 DNN支持CUDA。默认否。

        BUILD_opencv_python2:是否编译python2 cv2,默认是。

        BUILD_opencv_python3:是否编译python3 cv2,默认是。

        BUILD_opencv_dnn:是否使用DNN,默认否。

        PS:勾选配置完毕 ,再次点击configure、generate按钮。出现Configuring done、Generating done后,进行编译、安装。

step2、编译、安装

# cd build
make -j8 # 编译
sudo make install # 安装

4、路径配置

        默认安装路径则不需要设置。

4.1、设置扫描路径

        设置扫描路径,这块主要针对自定义位置安装,项目编译后产生的可执行文件、库文件、头文件需要被别的项目引用,扫描路径怎么设置?

        将opencv.pc所在目录设定到环境变量PKG_CONFIG_PATH。(opencv2/3编译后产生opencv.pc,opencv4编译后产生opencv4.pc)。

        OpenCV编译后会在/OPENCV_DIR_PATH/lib/pkgconfig/下产生opencv.pc文件。添加opencv.pc至配置路径后,即可被系统工具pkg-config扫描出来。

        自定义安装,我们会在/OPENCV_DIR_PATH/lib/pkgconfig/下发现opencv4.pc。将opencv4.pc所在目录设定到环境变量PKG_CONFIG_PATH。

        注:原文写到修改/etc/bash.bashrc,本文改为修改~/.bashrc文件。

sudo vim ~/.bashrc 
# 在最后加入: 
# opencv path 
export OPENCV_DIR_PATH=/usr/local/opencv440 
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$OPENCV_DIR_PATH/lib/pkgconfig

# 使修改生效 
source ~/.bashrc 
#查看变量是否生效 
echo $PKG_CONFIG_PATH

check1、检查opencv.pc路径是够正确(即其编译安装的位置),与opencv.pc读取有关:

pkg-config --variable prefix opencv4 # 输出:/usr/local/opencv440

4.2、设置python环境变量

        设置Python的cv2包的环境变量(必须) 自定义位置编译时,可能会出现一种情况,编译成功安装成功,OpenCV的c++demo也可以正常运行,但是进入python环境import cv2时会发现找不到包。因为自定义编译时,生成的cv2模块路径是: /OPENCV_DIR_PATH/lib/python3.6/dist-packages 需要将此路径设置加入环境变量PYTHONPATH中,以便于python环境中import时可以找到cv2。

# 新增PYTHONPATH环境变量 
sudo vim ~/.bashrc 
export PYTHONPATH=$PYTHONPATH:/OPENCV_DIR_PATH/lib/python3.6/dist-packages:/OPENCV_DIR_PATH/lib/python2.7/dist-packages 
source ~/.bashrc

        然后,我们就可以正常在python环境中import cv2了。

check2、python环境变量是否设置正确。

ubuntu18.04下opencv4.4编译_第5张图片

        安装好还需要进行配置,见下面【配置】一节。

        PS:此处再次验证时有问题,贴图占位。

4.3、添加Lib添加进环境变量

        主要是将opencv的lib路径添加到配置,能被系统扫描到,有什么用?其他项目,如darknet构建时需要用到opencv的lib,就可以直接引用到。

cd /etc/ld.so.conf.d
ls # 若已有opencv.conf则修改,无则创建 
sudo vim opencv4.conf

        将你opencv安装目录/lib路径写入opencv4.conf,并保存。如果你编译时是默认安装,路径是: /usr/local/lib。

        保存后刷新,使配置生效:

# 刷新lib库目录 
sudo ldconfig 

# 刷新目录缓存 
sudo /sbin/ldconfig

        有的教程写的是:编辑/etc/ld.so.conf,在最后加入 include /usr/local/lib,效果一样。

5、验证

check3、查看版本。

方式一:shell中直接查看

pkg-config opencv4 --modversion # 注,opencv2/3系列默认为opencv.pc

方式二:python中查看

>>>import cv2
>>>cv2.__version__

C++ demo测试:

        找到你的opencv源码包,假如是opencv-4.4.0,cd到opencv-4.4.0/samples/cpp/example_cmake/下执行官方给出的demo,需要执行cmake和make来编译cpp文件:

make 
./opencv_example

        PS:本机同时安装opencv3与opencv4,这里需要修改makefile中opencv改为opencv4。

        执行demo会调用打开Sample窗口,并调用你本地摄像头显示画面,没有摄像头画面如下:

ubuntu18.04下opencv4.4编译_第6张图片

        如果你是自定义路径安装的,请注意一下: 看一下CmakeLists.txt的内容:

ubuntu18.04下opencv4.4编译_第7张图片

        注释中表示,你需要设置变量OpenCV_DIR来找到OpenCVConfig.cmake文件的位置。通常如果你是执行默认位置安装,那么系统默认路径为:/usr/share/OpenCV/OpenCVConfig.cmake。如果你是自定义位置安装,需要通过在CmakeLists.txt中设置OpenCV_DIR变量的路径,来定位到你的Opencv目录,譬如:

set(OpenCV_DIR /usr/local/opencv440/share/OpenCV/)

6、卸载

        卸载相比安装,容易了许多,还是cd到opencv源码主目录/build文件夹下 sudo make uninstall。

        1)执行sudo make uninstall可将opencv相关的可执行文件、lib文件等,从OPENCV_DIR_PATH/bin/、OPENCV_DIR_PATH/lib、OPENCV_DIR_PATH/share中删除,不过还是会留空下文件夹,需要手动删除。

        2)继续执行:sudo make clean 将源码包内的编译相关文件删除、最后在build文件夹内执行sudo rm rf *删除源码包内所有文件。

你可能感兴趣的:(ubuntu/tx2,深度学习,opencv,ubuntu,linux)