本文主要介绍在配置OpenCV3.1.0中的几个坑。
如何设置cmake Python3
因为我没有使用Anaconda,所以,cmake将会检测到两个版本的python,而cmake倾向于使用低版本的python,也就是会选择python2,所以我们要对此进行修改。
我看见网上大多是直接给定cmake参数,比如说:
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_java=OFF \
-D PYTHON_EXECUTABLE=$(which python3) ..
但这似乎对我并不适用,因为在cmake的时候,仍然显示配置的是python2。那我们应该怎么办呢?
这个时候可以看一下CMakeLists.txt文件,在其中搜索python,可以发现有这么几行代码:
# --- Python support ---
include(cmake/OpenCVDetectPython.cmake)
显然这就是我们要寻找的用于检测和选择Python版本的文件,打开:
...
find_python(2.7 ...)
...
find_python(3.4 ...)
所以我们直接将find_python(2.7 …)直接注释掉,让cmake找不到Python2.7就可以了。
make && make install之后仍然无法import cv2
虽然说我们执行了make && make install指令,但是Python3找不到我们已经编译好了的库文件,我们需要的库文件是cv2.cpython-34m.so,所以我们先找到这个文件:
~/opencv/build/lib/python3/cv2.cpython-34m.so
第一种方法是将这个路径加入到PYTHONPATH中,并且修改上面的文件名为cv2.so;第二种方法是将该文件放到Python3能够找到的地方。
Python搜索模块的路径:
1) 程序的主目录
2) PTYHONPATH目录(如果已经进行了设置)
3) 标准连接库目录(一般在/usr/local/lib/python2.X或者python3.X)
4) 任何的.pth文件的内容(如果存在的话).新功能,允许用户把有效果的目录添加到模块搜索路径中去.pth后缀的文本文件中一行一行的地列出目录。
上面这四个组合起来就变成了sys.path了。
这里我们直接将cv2.cpython-34m.so文件复制到/usr/local/lib/python3.4中,并重命名为cv2.so,打开Python3:
>>> import cv2
>>> cv2.__version__
'3.1.0'
Ok,我们已经成功了。