OpenCV闯关记——Ubuntu16.04 OpenCV Python开发环境搭建

鸦青枚举
• 阅读 13193

闯关记简介

由于近期项目需要完成一个图像分析的任务,而以前也对OpenCV有所耳闻,但没有技术和产品上的需求,所以虽然想找时间玩玩,但苦于时间的紧张,一直没有真正去touch,这次打算正好利用这次机会做深入一点的研究。

实验环境

  • Ubuntu 16.04 64 Bits

  • Python2.7

  • OpenCV 3.1.0

那么,我们就愉快的开始这段奇幻之旅吧!

安装OpenCV的依赖

  • 更新 apt-get

sudo apt-get update
sudo apt-get upgrade
  • 更新一些必要的第三方开发者工具

sudo apt-get install build-essential cmake pkg-config
  • 做图像处理,图像I/O相关的库必不可少

sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
  • 当然也需要一些视频相关的库

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
  • 在带X-Window的系统中OpenCV用到的 highgui 所需的依赖

sudo apt-get install libgtk-3-dev
  • OpenCV矩阵计算算法优化所用到的库

sudo apt-get install libatlas-base-dev gfortran
  • Python语言绑定所需要的开发包

sudo apt-get install python2.7-dev python3.5-dev

下载OpenCV源码包

  • OpenCV 3.1.0

cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
unzip opencv.zip
  • OpenCV 3.1.0 Contribution版也会用到

wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
unzip opencv_contrib.zip

建立Python虚拟环境,以隔离对其他环境的影响

  • 获取 pip 模块

cd ~
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
  • 安装 virtualenv

sudo pip install virtualenv
sudo rm -rf ~/get-pip.py ~/.cache/pip
  • 创建Python虚拟环境

mkdir ~/.virtualenvs
cd ~/.virtualenvs
virtualenv cv -p python2

安装 numpy 模块

这里比较坑,因为国内网络原因,下载了很多遍都下不下来,考虑过以下几种方法解决,只有最后一种方法对我来说work:

  • 使用国外VPN,我使用的是日本和韩国的VPN,速度会快一些,但是几次都是在最后一点快成功的时候失败了……

  • 使用douban的源,没办法,直接报错……

  • 不直接使用“pip install”,而是先wget下whl包,然后在“pip install”这个whl包

source ~/.virtualenvs/cv/bin/python
wget https://pypi.python.org/packages/5e/d5/3433e015f3e4a1f309dbb110e8557947f68887fe9b8438d50a4b7790a954/numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl#md5=fa62a11922a9e0776963508fb5254d3d
pip install numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl

编译OpenCV库

  • 好啦,前面的准备工作都做好了,接下来要开始编译OpenCV库!

cd ~/opencv-3.1.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
    -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
    -D BUILD_EXAMPLES=ON ..
  • 毕竟在前面已经耗费了很多精力,到这里应该很快就能结束战斗了,但是……还是太天真了!在下载“ippicv_linux_20151201.tgz”包的时候,有卡住了,这个30+M的包就是下不下来……果断找资料,原来可以先手动下载这个包,然后在重新开始编译,这样就可以顺序进行下去了。

cp ippicv_linux_20151201.tgz ~/opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
    -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
    -D BUILD_EXAMPLES=ON ..
make -j2    # 2 stand for the cpu number
sudo make install
sudo ldconfig
  • 编译结束,检查编译是否成功

ls -l /usr/local/lib/python2.7/site-packages/ | grep cv2.so

完成OpenCV Python语言绑定

  • 创建软连接到虚拟环境

cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so
  • 测试Python的OpenCV模块

python
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>
  • Now everything done, get ready to roll!

Refer

注:本文属原创,码字辛苦,未经同意,请勿转载,最后感谢阅读!——小杰控

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
ATP的OpenCV笔记(一):对图片的基本操作
写在前面ATP成功进化成弃坑大师。。主要是正式开课以后自己乱搞着玩儿的东西就不想管它了QAQ。。。Python学会了以后也懒得往博客里写了。。这次打算开的坑emmm是上课讲的内容?由于要记住的函数用法太多ATP懒得每次遇到都百度所以相当于在blog里面记一下嗯就是这样。OpenCV是个可以用来做图像处理的库?在C和python里面都有
Wesley13 Wesley13
3年前
ubuntu16.04下基于Python的OpenCV的安装
这几天一直在学习基于Python的OpenCV,开发环境是在Ubuntu16.04下,学习的心得就是基于Python的OpenCV开发基本上就属于函数式编程了,OpenCV提供了大多数的功能函数,以及大多数的算法封装,并不需要从头开发,不需要重复的造轮子,需要的仅仅是将各个零部件进行组装。所以学习起来相对容易一些。但是这是建立在对于Python有一定的基础
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
鸦青枚举
鸦青枚举
Lv1
世人结交须黄金,黄金不多交不深。
文章
4
粉丝
0
获赞
0