Ubuntu16.04编译OpenCV3.4.7
原文:https://www.bearoom.xyz/2019/08/20/ubuntu16-04-make-opencv3-4-7/
一、前言
因为之前作死乱搞系统,然后就把Ubuntu的系统搞垮了,对于我这样的菜鸟而言,问题又看不懂,解决不了,docker又不会,从来都是重装系统解决一起。系统一重装,开发环境就得重来...
这次,编译的OpenCV版本是3.4.7,虽然4.0都出来了...
下载源码:
1、OpenCV,在这里找到要编译的版本,我找的是OpenCV3.4.7;
2、opencv_contrib,如果不想用这里面的功能,其实这个可以不用管的;找到和OpenCV3.4.7对应的opencv_contrib-3.4.7下载。
3、ippicv_2019_lnx_intel64_general_20180723,这个在cmake的时候会自己下载,但是贼慢,慢到可能都断掉了,所以还是手动下载吧。
4、face_landmark_model.dat,这个是make的时候下载,也是贼慢,也可以手动下载。
二、可能必要的前置
1、更新系统:
sudo apt-get update
sudo apt-get upgrade
2、依赖包:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev 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
三、编译
编译OpenCV,真的建议安装cmake的GUI,省事。安装cmake的GUI,如果跟我一样是菜鸟,真的别傻呼呼的敲命令行指令编译了,浪费时间,还几乎都不会去想这些指令是干啥的:
```
sudo apt-get install cmake-qt-gui
```
然后解压OpenCV3.4.7和opencv_contrib-3.4.7,进入到OpenCV3.4.7的根目录下,打开终端,输入指令,新建build文件夹:
```
mkdir build
cd build
```
打开cmake的gui:
cmake-gui ..
设置cmake的源码路径和输入输出(不过这个这样打开就设置好了)

打开分组视图和高级项:

接下来各项设置,仅供参考:














这里的设置应该是比较清楚的,比命令行真的容易太多了,绝对适合我这种苯苯的菜鸟。有些设置是要先打开一些开关后,点击configure按钮先配置一会才会出来的:

configure点击之后应该会下载一些文件,包括前面提到的ippicv_2019_lnx_intel64_general_20180723,而face_landmark_model.dat可能是在cmake的时候下载,也可能是make的时候,反正都可以先下载下来。因为configure之后,ippicv等文件会下载很久,所以可以修改文件的路径指向本地文件,而不用每次都下载:
1、修改ippicv.cmake 文件,在/opencv源码根目录/opencv/3rdparty/ippicv/这个路径下,先执行一次cmake或者cmake GUI的configure之后才会有,修改原来的第47行左右,改为本地文件:

2、修改下载face_landmark_model.dat的CMakeLists.txt文件,在opencv_contrib-3.4.7/modules/face/CMakeLists.txt,大概是19行左右,也修改为自己下载的本地文件路径:

OK,这些修改好之后,重新点击configure,然后再点击generate生成配置文件就可以关闭cmake的GUI了,接下来就是正常的make编译了:
make
make install
这里如果需要权限的话,就在命令前面加sudo,make如果太慢,可以:
make -j4
4是指4个线程,也可以是8或16或其它,看自己的CPU配置了吧。

到这里差不多就make完成了,然后就是install,install基本没啥问题,有问题一般会在make的时候出现。
四、我遇到的问题:
问题1、出现类似/usr/bin/ld: warning: libpcre.so.1, needed by...的问题

解决方法,参考:在/etc/ld.so.conf.d下创建一个opencv.conf文件:
gedit /etc/ld.so.conf.d/opencv.conf
输入内容:
/usr/local/lib
/usr/local/anaconda3/lib
sudo ldconfig
然后重新make即可。
问题2,:提示类似//usr/lib/liblept.so.5:对‘TIFFGetVersion@LIBTIFF_4.0’未定义的引用等问题。

解决方法,参考:安装liblept5,有些博客会说下载tiff-4.0.4.tar.gz,然后编译安装,其实在我这个问题上不适用,解决不了。所以还是用下面这句安装:
sudo apt-get autoremove liblept5
我基本就遇到这两个问题,所以暂时也就只记录这两个问题吧。
五、参考
1、cmake GUI安装Opencv:
https://blog.csdn.net/jindunwan7388/article/details/80397700
https://blog.csdn.net/jindunwan7388/article/details/80397700
2、解决make问题的:https://blog.csdn.net/tsq292978891/article/details/78854188
https://blog.csdn.net/weixin_40409574/article/details/90714591
3、解决ippicv和人脸文件下载的:
https://blog.csdn.net/CSDN330/article/details/86747867
桃李溪边驻画轮。鹧鸪声里倒清尊。夕阳虽好近黄昏。 香在衣裳妆在臂,水连芳草月连云。几时归去不销魂。
–苏轼 《浣溪沙·春情》
Ubuntu16.04编译OpenCV3.4.7的更多相关文章
- Ubuntu16.04编译安装php
#Ubuntu16.04编译安装php Ubuntu16.04上面搭建基于Nginx的php服务.Nginx使用apt直接安装的. sudo apt install nginx php的安装部署步骤主 ...
- 【PyImageSearch】Ubuntu16.04使用OpenCV3.3.0实现图像分类
这篇博文将会展示如何采用一个预训练的深度学习网络(模型)在ImageNet的数据集并把它当作输入图像. 首先说明,运行环境为Ubuntu16.04(或者MacOS),windows暂不支持,已经编译好 ...
- Ubuntu16.04编译Android6.0/cm13.0教程及相关错误解决办法
一.必备工作 1.安装依赖库 sudo apt--dev libesd0-dev git-core gnupg flex bison gperf build-essential zip curl zl ...
- ubuntu16.04编译安装mysql-boost-5.7.21并编译成php扩展测试与使用
我之前的文章已经改造了自定义MVC框架中的工具类(验证码,图片上传,图像处理,分类)4个类,接下来,就要改造模型类,模型类肯定要连接数据库,由于我的Ubuntu Linux是裸装的php(目前只编译了 ...
- Ubuntu16.04编译安装tensorflow,2018最新血泪踩坑之后的全面总结!绝对成功!【转】
本文转载自:https://blog.csdn.net/pzh11001/article/details/79683133 大家好,我是 (深度学习硬件DIY总群)(719577294)群主: ...
- ubuntu16.04编译QT5.6所依赖的库
首先在QT的根目录下,阅读README文件! 里面介绍了ubuntu环境下,编译该版本的QT需要安装的包 New dependencies in Qt 5 ------------------- ...
- Ubuntu16.04编译tensorflow的C++接口
原文:https://www.bearoom.xyz/2018/09/27/ubuntu1604buildtf4cpp/ 之前有一篇介绍到在windows下利用VS2015编译tensorflow的C ...
- Ubuntu16.04编译libjpeg-turbo库
一.环境依赖 CMake v2.8.12或以后 NASM or YASM (if building x86 or x86-64 SIMD extensions),如果使用NASM, 依赖2.10之后版 ...
- Ubuntu16.04编译Openjdk8,笔者亲测编译成功
现在很多语言都不开发运行环境了,都选择在JRE上运行,足以证明JVM的优越.你精通了JVM,未来的路才可能走得轻松.这篇文章是你走近jvm的第一篇,编译Openjdk8源码 编译环境 操作系统:Ubu ...
随机推荐
- C++路径的整理
写C++,路径的问题一直都让人很头疼,抽空整理一些方法:也许以后会用到: 1."./" 加不加都一样,就是指当前目录 2."../" 表示当前目录的上级目录,即 ...
- netty权威指南学习笔记三——TCP粘包/拆包之粘包现象
TCP是个流协议,流没有一定界限.TCP底层不了解业务,他会根据TCP缓冲区的实际情况进行包划分,在业务上,一个业务完整的包,可能会被TCP底层拆分为多个包进行发送,也可能多个小包组合成一个大的数据包 ...
- .Net 经典案例
1.捕捉一只小可爱 using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...
- 036-PHP闭包函数的域限制,与如何向闭包函数传递变量
<?php // 闭包函数的域限制,与如何向闭包函数传递变量 # 隐藏上面的代码,我们最后再来试下 function demo($ATxt) { $func = function () use ...
- ES6 之 对象属性的可枚举性和遍历
1.Object.getOwnPropertyDescriptor() 解释:获取对对象属性的描述对象. let obj = { foo: 123 }; console.log(Object.getO ...
- 压测工具siege和wrk
siege压测工具 安装: wget http://download.joedog.org/siege/siege-3.0.8.tar.gz cd siege-3.0.8 ./configure ma ...
- sprngmvc+restFul 请求报错:404
服务端代码 control类 @RequestMapping(value="getUser",method = RequestMethod.POST) @ResponseBody ...
- vue-router 二级路由(父子路由)
使用二级路由 会显示父路由下面的子路由 且父子路由同时显示 因为父子同时显示 路由地址在同一级别/ 路由的显示模式有两种(都是为了减少数据库后台请求次数) #hash模式(#是特殊字符,很多场合不 ...
- 编程入门-Eclipse的断点调试
编程入门-Eclipse的断点调试 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.双击选中你要调试的代码行数 2>.允许方法透视图 3>.进行代码调试 4& ...
- P 1023 组个最小数
转跳点: