引言

本篇主要想总结一下Ubuntu下opencv对于CPU的编译全过程,以及遇到的一些坑。

依赖项安装

首先我们需要CMake来配置安装,GCC进行编译,Python-devel和Numpy来构建Python绑定等。

sudo apt-get install cmake
sudo apt-get install gcc g++

一般云服务器是没有cmake的,而本地服务器的cmake也可能会版本比较低,如果需要编译opencv4以上的版本,需要将cmake卸载,通过GitHub中的最新版源码安装,因为当前没有官方源更新到相应的版本。

GTK支持(图形界面库)

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

可选图片支持库

sudo apt-get install libpng-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libopenexr-dev
sudo apt-get install libtiff-dev
sudo apt-get install libwebp-d

安装python2、python3支持模块
一般不建议安装2的版本,在centos中因为yum连接为python2.7,这里会有很神奇的事情发生,有一次再重新编译过程中,我没有锁定python3的版本,发现cmake到make都没问题,make install的时候opencv的动态库自动匹配到了python2.7而给我安装了opencv2.4.5的动态库。。。但我的包是3.4.6,所以如果不是对2有要求,建议在配置锁定。

# 安装python2支持
# sudo apt-get install python-dev python-numpy
# 安装python3支持
sudo apt-get install python3-dev python3-numpy

GUI功能的GTK支持,相机支持(v4l),媒体支持(ffmpeg,gstreamer)等。

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

当然,如果需要配合ffmpeg使用的话,这些包是不够的,后面会提到还有哪些包缺失已经出问题的原因,这里可以引用一个超级大法,把能装的都写上跑一遍就行,当然这是没有办法的时候的办法了。。。

sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264v4l-utils unzip

ffmpeg安装

我之前有总结过关于ffmpeg的编译方式,这里就不过多引用了,根据需求进行编译安装:

ffmpeg利用NVIDIA硬件加速编译

ffmpeg源码带libx264安装并用ffplay推流测试

ffmpeg与srs3编译以及常用命令测试总结

这里主要介绍一些依赖包的地址:

libogg
Oog 数据流库, 是libtheora 和 libvorbis 的依赖
libogg-1.3.2.tar.gz
Url:http://www.xiph.org/downloads/

lame

lame-3.99.5.tar.gz
Url:http://sourceforge.net/project/showfiles.php?group_id=290&package_id=309

NASM
一个汇编编译器
nasm-2.13.01.tar.bz2
Url: http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.bz2

Yasm
另一个汇编编译器
yasm-1.3.0.tar.gz
http://www.tortall.net/projects/yasm/releases/

libvorbis

libvorbis-1.3.3.tar.gz
Url:http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
(libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装)

xvid

xvidcore-1.3.2.tar.gz
Url:http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz

x264

latest_x264.tar.bz2 (其中包含的目录是 x264-snapshot-20131023-2245) ,H.264 的视频编码器, 如果需要使用的话, 在编译 ffmpeg 中需要添加参数 --enable-gpl --enable-libx264
Url:http://www.videolan.org/developers/x264.html
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/

amr-nb

amrnb-10.0.0.0.tar.bz2
http://ftp.penguin.cz/pub/users/utx/amr/ ( 从此处下载最新版本 )

amr-wb

amrwb-7.0.0.1.tar.bz2
http://ftp.penguin.cz/pub/users/utx/amr/ ( 从此处下载最新版本 )

faad2

faad2-2.7.tar.gz
http://www.audiocoding.com/downloads.html

libfdk_aac
AAC 音频解码器, 如果需要使用的话, 在编译 ffmpeg 中需要添加参数 --enable-libfdk_aac, 如果添加了 --enable-gpl参数, 还需要同时使用 --enable-nonfree 参数
https://github.com/mstorsjo/fdk-aac

libvpx

VP8/VP9 视频编解码器, 如果需要使用的话, 在编译 ffmpeg 中需要添加参数 --enable-libvpx
https://chromium.googlesource.com/webm/libvpx.git

以上包的安装方式都是找到configure所在目录,然后编译安装:

./configure
make
make install

然后网上还有一种https的安装方式,我尝试过但请求被拦截了下来,因为ssl,所以还是用上面的安装包,需要什么装什么。

opencv安装

当所有依赖和ffmpeg都安装好并没有问题的情况下,可以进行OpenCV的编译,将opencv3.4.7解压后创建build文件夹并进入:

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

执行cmake,构建CMakeLists.txt自动化创建makefile,cmake需要之前可以指定一些构建参数,用来确定安装位置:

# 傻瓜式cmake
cmake ../
# 带参数cmake 默认位置安装
cmake ../ -DWITH_CUDA=OFF  -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON  -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF
# 带参数cmake 自定义位置安装
cmake ../ -DWITH_CUDA=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/opencv/opencv-3.4.7 -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON  -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF

然后可以看到cmake进行编译与满屏的日志,这里还会出现一个问题,可能ippicv_2019_lnx_intel64_general_20180723.tgz没有下载成功,因为它会向外网发送一个HTTP请求,如果下载失败,我将资源上传到了百度网盘里:链接:https://pan.baidu.com/s/1clRhwdCph4KtJcyTGg7sqA
提取码:htpi

-- IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz
--
=======================================================================Couldn't download files from the Internet.Please check the Internet access on this host.
=======================================================================CMake Warning at cmake/OpenCVDownload.cmake:193 (message):IPPICV: Download failed: 6;"Couldn't resolve host name"For details please refer to the download log file:/home/runone/program/opencv-3.4.7/build/CMakeDownloadLog.txt

如上,是失败日志,我编译了很多次都有概率出现安装不下来的时候,然后每次手动加载包的时候又忘记放哪了,索性上传网盘,如果链接失效,可以私信或者评论区留言。

下载好后,将文件放在opencv-3.4.7/3rdparty/ippicv下,然后更改ippicv下的ippicv.cmake 文件,vim进去后定位到47行,将路径改成安装包的绝对路径的上一级,然后再次尝试cmake:

出现如下日志,说明ippicv_2019_lnx_intel64_general_20180723.tgz本地包加载成功:

-- IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz
-- found Intel IPP (ICV version): 2019.0.0 [2019.0.0 Gold]
-- at: /home/program/opencv-3.4.7/build/3rdparty/ippicv/ippicv_lnx/icv
-- found Intel IPP Integration Wrappers sources: 2019.0.0
-- at: /home/program/opencv-3.4.7/build/3rdparty/ippicv/ippicv_lnx/iw

第二个问题 是关于ffmpeg的问题,如果依赖不是按照上述中安装的那样,会出现opencv检索ffmpeg全no的情况:

FFMPEG:                      NOavcodec:                   NOavformat:                  NOavutil:                    NOswscale:                   NOavresample:                NO

这个问题坑了我两个多小时,网上面的解答都是说我没有加检索路径,需要添加ffmpeg的项,然后不外乎就是下面这几句:

export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATHexport PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig:/usr/local/libsudo cp /usr/local/ffmpeg/lib/pkgconfig/*  /usr/share/pkgconfig

后来重新卸载了几遍ffmpeg后,在编译最后看到了问题所在。。这也说明,即使编译输出很多,但该检索还是需要看一遍的:

Can't find ffmpeg - 'pkg-config' utility is missing

那么这句话说明,少了pkg-config的依赖,我一直以为预装好了,但没有,so:

apt-get install pkg-config

pkg-config的作用是:

  • 检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
  • 获得编译预处理参数,如宏定义,头文件的位置。
  • 获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
  • 自动加入所依赖的其它库的设置。

另外还有一些其它问题,本篇CPU的话就不再赘述了,等之后写关于GPU的编译笔记在贴出遇到的错误,只能说遇到了太多太多问题。。。当我们CMake好后,需要看cmake输出是否对 Link libraries 进行了两个版本的python的链接,如果有,那么需要注意,最好是在环境变量中先暂时锁定python3,因为上述没有安装python2的依赖,直接make可能会出问题。

如果检查cmake输出无误,那么就可以进行make和make install,在CPU下,make一般不会出现问题,只有GPU才会报很多异常错误,这里make按照自己服务器的核数进行多核编译,因为单核下,实在是太慢,所以我的编译命令为:

make -j8
make install

不飘红或者make error即为成功,然后将其导入环境配置项中:

# 将opencv添加到系统环境变量中,使得其他程序能够找到opencv环境
vim /etc/ld.so.conf.d/opencv.conf 追加 /usr/local/opencv3/lib64/
sudo ldconfig -v
sudo cp /usr/local/opencv3/lib64/pkgconfig/opencv.pc /usr/share/pkgconfig/#测试opencv是否安装成功
pkg-config --modversion opencv # 显示如下
3.4.7

到此,opencv就算编译成功,如果需要调用,找到编译成功的python路径下产生了cv2.cpython-36m-x86_64-linux-gnu.so,将其移动到所需项目下即可启动。

ubuntu18.04下opencv用CPU编译全过程相关推荐

  1. Ubuntu18.04下Opencv的安装以及使用

    文章目录 前言 一.Opencv的安装 二.Ubuntu18.04下opencv的应用实例 1.图片的显示 2.摄像头的的使用 (1)获取摄像头的权限 (2)摄像头调用录制视频 (3)播放视频 三.参 ...

  2. Ubuntu18.04下Opencv的安装及使用实例

    本文主要介绍了在Ubuntu18.04系统下练习编译.安装著名的C/C++图像处理开源软件库Opencv 3.4.12(过程多,耗时长,需要耐心和细心) 目录 一.Opencv简介 二.Opencv安 ...

  3. Ubuntu18.04下磕磕磕绊绊绊编译安装GCC6.3的过程

    因为Ubuntu下面的MATLAB非要用GCC6.3,而且在安装过程中遇到了比之前遇到的任何问题都要多的问题,所以特地开一个帖子来记录下安装过程 环境要求 安装GCC之前有几个库是一定需要的,GMP, ...

  4. Ubuntu18.04下安装NVIDIA显卡驱动、docker、nvidia-docker;容器中编译安装opencv-4.4.0与darknet-yolov4并完成测试;容器封装镜像转移。2022

    记录一下第一次在CSDN发博客,欢迎大家光临~ 文章目录 前言 一.宿主机配置 1.安装Ubunntu18.04 64位系统 2.为宿主机系统更换国内软件源Ubuntu 官方源服务器在欧洲,国内访问很 ...

  5. caffe在ubuntu18.04下编译

    <!---title:caffe在ubuntu18.04下编译--> <!---keywords:caffe, build, ubuntu18,--> 原始引用地址:  [ca ...

  6. 20221218解决在Ubuntu18.04下编译Firefly的Core-3588J出现lz4的问题

    20221218解决在Ubuntu18.04下编译Firefly的Core-3588J出现lz4的问题 2022/12/18 15:37 解决方法:编译最新的lz4的dev分支! https://wi ...

  7. Ubuntu18.04下基于ROS和PX4的无人机仿真平台的基础配置搭建(XTDrone的)

    摘自:https://www.ngui.cc/51cto/show-23557.html Ubuntu18.04下基于ROS和PX4的无人机仿真平台的基础配置搭建 编程学习 · 2020/7/12 1 ...

  8. Ubuntu18.04下的PCL安装(摸爬滚打)

    目录 Ubuntu18.04下的PCL安装 1.先安装Qt5,X11,OpenGL 1)安装Qt5 2)安装x11 3)安装OpenGL 4)安装libglut-dev 2.安装VTK(直接把pcl依 ...

  9. 【三维视觉】【深度学习】ubuntu18.04下PointNet官方代码Pytorch实现

    [三维视觉][深度学习]ubuntu18.04下PointNet官方代码Pytorch实现 提示:最近开始在三维深度学习方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法. 文章目录 [ ...

  10. Ubuntu18.04+Qt+Opencv+opencv_contrib 解决putText中文乱码问题

    目录 问题描述: 目的: 配置环境的过程记录: 1 opencv的卸载 1.1 自带的opencv3.3.1卸载方式 1.2 源码安装的opencv卸载方式 2 opencv及opencv_contr ...

最新文章

  1. 【深度好文】我们的未来在哪里?
  2. 【PHPWord】从模板创建Word
  3. 一起学asp.net基础文章二 服务器控件、客户端控件和html表单控件
  4. 华为 泰山 服务器 操作系统安装,华为Taishan服务器安装CentOS7操作系统
  5. [机器学习] 二分类模型评估指标---精确率Precision、召回率Recall、ROC|AUC
  6. final 在java,final 在java中的注意点
  7. dfa转正则表达式_GitHub - hidva/re2dot: 根据正则表达式生成其对应 DFA 的状态转移图...
  8. Android 功耗(11)---Android 功耗分析之wakelock
  9. 常用Python文件
  10. 使用高效代理抓取58同城巴州二手房信息并保存至excel
  11. NOIP2017提高组Day2T1(奶酪)题解
  12. [VS2017][CUDA]更新visual studio 2017 v15.6.1之后遇到的问题[当前页面的脚本发生错误等]
  13. 若依 后台框架配置丛数据源使用
  14. 编辑中的word变成只读_word只读模式怎么改 word保存文件提示此文件为只读无法保存修改方法...
  15. ssms管理linux数据库,使用 SSMS 管理 Linux 上的 SQL Server - SQL Server | Microsoft Docs
  16. 运用知识图谱技术,赋能多领域应用 ——“未来杯”AI学术联赛总决赛暨颁奖典礼圆满落幕...
  17. 第二集 第一魂环 第九章
  18. GMAC接口(3)——传输描述符
  19. 网络映射iscsi服务器,群晖iSCSI管理器连接网络硬盘详细介绍和配置使用说明
  20. Windows下python程序报错Nomodule named 'gevent'解决及ERROR: xxx.whl is not a supported wheel on this platform

热门文章

  1. stata15中文乱码_Stata15:一次性转码,解决中文乱码问题
  2. 访问线上平台出现http状态码“502”和“504”
  3. 数字电子技术基础——第二章 逻辑代数基础
  4. linux内核移植imx8,NXP iMX8 Ubuntu 系统移植及 ROS 应用
  5. 提升PPT逼格的利器!只需1招,让PPT页面化腐朽为神奇~
  6. 活动回顾 I 《传奇动物园》项目团队沙盘演练圆满结束!
  7. eclipse字体大小调整
  8. 「期末」微机原理复习速成(上)
  9. (附源码)计算机毕业设计ssm 航空订票系统
  10. 【区块链】量子链命令行qtum-cli全命令详解