【Linux】Anaconda Python3.6 OpenCV3.3 Ubuntu 16.04源码编译

2018.08.22更新:
Mac到手了,环境立马配起来,先把ffmpeg装了不然后面读视频读不了。

brew install ffmpeg
brew install pkg-config

pkg-config这个东西有点恶心,装了ffmpeg还不行,在ccmake里一直显示ffmpeg是no,非得装,opencv还有个专门的issue OpenCV 3.2.0 won’t see ffmpeg on cmake. Versions 3.1.0 and 3.0.0 will,不过不用看那么多,只要把pkg-config装好,ccmake上面的ffmpeg就yes了。

然后我还是先装的python3版的anaconda,cmake命令如下,后面编译什么的都一样不多说了。

cmake -D WITH_IPP=OFF -D PYTHON_DEFAULT_EXECUTABLE=/Users/phd/Softwares/anaconda3/bin/python3 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=/Users/phd/Softwares/anaconda3/bin/python3 -D PYTHON3_INCLUDE_DIR=/Users/phd/Softwares/anaconda3/include/python3.6m -D PYTHON3_LIBRARY=/Users/phd/Softwares/anaconda3/lib/libpython3.6m.dylib -D PYTHON_NUMPY_PATH=/Users/phd/Softwares/anaconda3/lib/python3.6/site-packages ..

口说无凭,给个图吧(随便找了个SLAM讲课的视频)
mac0

mac1


2018.07.16更新:
以前把anaconda装在Documents里了,强迫症看着不舒服,今天把乱七八糟的文件夹都清理了一下,把原来的anaconda和opencv全删了,网上下了最新的anaconda 3.5.2和最新的opencv 3.4.2源码,按之前的步骤重新编译了一遍(就改了路径,下面可以看到我在opt,自己随意不强求),编译完了直接sudo make install安装,基本上没啥问题。

贴出命令以示清白(如果是别的版本,先看下libpython3.6m.so.1.0等这些东西都在不在,是不是,千万不要直接拷代码硬刚)

cmake -D WITH_IPP=OFF -D PYTHON_DEFAULT_EXECUTABLE=/opt/anaconda3/bin/python3 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=/opt/anaconda3/bin/python3 -D PYTHON3_INCLUDE_DIR=/opt/anaconda3/include/python3.6m -D PYTHON3_LIBRARY=/opt/anaconda3/lib/libpython3.6m.so.1.0 -D PYTHON_NUMPY_PATH=/opt/anaconda3/lib/python3.6/site-packages ..

在使用的时候,可能会遇到下面这个小问题需要解决一下:
在编译完上述新的opencv并安装之后,我在编译自己用qt写的标注工具(用cmake管理的)的时候出现了下面的错误:

//opt/anaconda3 libpng16.so.16 对‘inflateValidate@ZLIB_1.2.9’未定义的引用

网上一搜,所有的来源基本上都是在编caffe的时候才遇到的这个问题,而所有的答案基本上都来源于下面caffe的这个issue:
https://github.com/BVLC/caffe/issues/6139

我自己的机子根本就没装caffe,让改的Makefile.config是caffe的又不是opencv里的,搞毛线啊。

后来仔细看下路径,//opt/anaconda3 前面两条杠是几个意思?我以为问题出在路径这里,ccmake …进去看了下,路径没问题啊。

接着我以为是那俩库没装,于是conda install libpng zlib…了一波,但是没卵用,装得时候问我要不要更新anaconda里的这几个库。。。

再后来想了想,链接问题,估计就是opencv编译的时候没带上这几位。于是马上ccmake …,t一下找到如下flags:

BUILD_ZLIB
BUILD_JPEG
BUILD_TIFF
BUILD_PNG
#上面四个是指从源码编译安装库,如果install了可以不用再开

WITH_PNG
WITH_JPEG
WITH_TIFF

ON一波,然后查看一下上面这些库的lib和include都指到了正确的位置。接着就是c g, make -j8了,make完了install,跑项目稳的一笔。

总结:ccmake是个好东西


2017.10.16原文:
anaconda pip或者conda直接install opencv-python的opencv版本无法读取视频,装了ffmpeg也没用,估计是被阉割了,没办法只能下源码编译。

重复一下:系统是Ubuntu 16.04;anaconda是python3.6的,装在了/home/naphid/Documents/anaconda3里;opencv源码版本是3.3。

下完opencv源码后解压,新建一个build文件夹,cd到build;直接输入cmake … 不出意外opencv会链到系统的python2.7上去(看cache可知),所以需要指定到咱下的anaconda的python3上;另外IPP这个加速包一般被墙了下不来,反正我们也是research不是production,干脆不要算了。下面的命令复制到终端,实在不行就一行行复制,记得把python所有相关路径改到自己的anaconda下。 (用ccmake改也行)

cmake 
-D WITH_IPP=OFF 
-D PYTHON_DEFAULT_EXECUTABLE=/home/naphid/Documents/anaconda3/bin/python3 
-D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF 
-D PYTHON3_EXCUTABLE=/home/naphid/Documents/anaconda3/bin/python3 
-D PYTHON3_INCLUDE_DIR=/home/naphid/Documents/anaconda3/include/python3.6m 
-D PYTHON3_LIBRARY=/home/naphid/Documents/anaconda3/lib/libpython3.6m.so.1.0 
-D PYTHON_NUMPY_PATH=/home/naphid/Documents/anaconda3/lib/python3.6/site-packages 
..

从cmake的summary中确认已经成功链到想要的地方后,开始编译。

make -j4

编译完成后,把编译出来的cv2.cpython-36m-x86_64-linux-gnu.so库拷到anaconda的python库包下;其实不用sudo make install,opencv就已经可以用了,python的warpper都有。

cp /home/naphid/Documents/opencv-3.3.0/build/lib/python3/* ~/Documents/anaconda3/lib/python3.6/site-packages/

终端输入python,import一下cv2,多半会出错。

naphid@phdsky:~/Documents/anaconda3/lib/python3.6/site-packages$ python
Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:09:58) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /home/naphid/Documents/anaconda3/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/naphid/Documents/anaconda3/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so)

如果出了上面的错误`GLIBCXX_3.4.21’ not found,一定是因为gcc库版本太老,conda装个。

conda install libgcc

再试一次,import应该没问题了,然后赶紧试一下能读视频否。

import cv2

cap = cv2.VideoCapture('/home/naphid/Documents/phd.avi')

print(cap.isOpened())

while (cap.isOpened()):
    ret, frame = cap.read()
    if frame is None:
        break
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

如果还是不能读取视频打印了False的话,估计以前没装过ffmpeg视频解码相关库,sudo apt install ffmpeg装一下,再重来之前所有步骤即可。

之前其实直接把so库拷过去就能用,但是后来在编译caffe的时候发现cmake找不到源码编的opencv;原因是opencv相关config没在系统路径里,cmake找不到,所以如果要基于opencv编译其他东西的话,最好还是install一下。

sudo make install
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值