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

来源:互联网 发布:mysql change column 编辑:程序博客网 时间:2024/06/10 23:39

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这个加速包一般被墙了下不来,反正我们也是reserch不是production,干脆不要算了。下面的命令复制到终端,实在不行就一行行复制,记得把python所有相关路径改到自己的anaconda下。

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$ pythonPython 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 linuxType "help", "copyright", "credits" or "license" for more information.>>> import cv2Traceback (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 cv2cap = 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'):        breakcap.release()cv2.destroyAllWindows()

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

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

sudo make install
阅读全文
0 0
原创粉丝点击