电脑里有:Python2.7.5、python3.5.0(后来下载安装的,当下载安装这个版本后,发现输出python -V命令出来的只会是3.5.0l了)、opencv3.2.0、numpy1.9.0(我自己手动下载安装的)。看了网上的很多教程,试了很多遍,弄完以后仍旧没有cv2.so!找了很久原因,看到别人说:
才恍然大悟,原来在cmake时,不管是用python2还是python3,那下面的几栏都得有路径,不然无效!!!!!!!!!!当然中间有个含PYTHON_NUMPY字样的那栏也要填上numpy的路径!
于是我再一次编译安装opencv3.2时候出现:
虽然是个报错,但这里出现了cv2字样以及opencv_python3字样!!!!!!!!!于是我想是不是我自己手动下载的这个numpy的版本不对?!于是我试着yum install numpy,但yum命令用不了会报错,因为yum不支持python3以上的版本!所以我只能将python命令默认到python2.7.5版本而不是python3.5:
然后我再yum install numpy。找到numpy安装在哪里(我的去了usr/lib64/python2.7/site-packages/下面)。然后再看这个numpy的core/include/numpy下有没有_numpyconfig.h(注意不是_numpyconfig.h.in)文件。我找了下,有。也就是说我之前手动下载的numpy里没有找到_numpyconfig.h文件而这里有。于是我把这个_numpyconfig.h复制到我的numpy1.9.0的/numpy/core/include/numpy/下面。(因为我之前cmake时PYTHON_NUMPY_INCLUDE的路径我写的就是numpy1.9.0/numpy/core/include)
接着之前报错的地方继续安装,出现:
看之前的_numpyconfig.h的那个错不报了,解决了。往下编译安装时出现_multiarray_api.h这个错。于是我去我的numpy1.9下面找,果然没有这个文件而在/usr/lib64/python2.7/site-packages/numpy/core/include/numpy下又找到了这个文件。有两种办法:1、按照我之前的解决办法,复制过去,重新编译安装,出现什么错再解决。2、或者直接从cmake那里重新编译OpenCV,重新填写PYTHON_NUMPY的路径!改成什么文件都不缺的/usr/lib64/python2.7/site-packages/numpy/core/include/numpy。我选择了办法2:
PYTHON2_***和PYTHON3_***后的都都要填上路径,尽量补全!!!我除了PYTHON2_INCLUDE_DIR2 PYTHON_LIBRARY_DEBUG PYTHON3_INCLUDE_DIR2 PYTHON3_LIBRARY_DEBUG 这4项没有写路径其它都写了并核对了。仔细看我这里的PYTHON2_NUMPY_INCLUDE_DIRS与PYTHON3_NUMPY_INCLUDE_DIRS的路径,这不是我自己下载的numpy1.9文件夹路径,因为这里面缺少上次报错的一些文件!而现在填上的路径里是不缺这些文件的:
然后configure,接着configure,接着generate即可。
然后去刚刚编译好的文件夹下面,make :
看终于出来cv2字样了,感觉离成功不远了。
继续make install。然后我的即可在刚刚编译的文件夹下找到这个cv2的字样:
这时候通过在整个计算机中查找,我发现/usr/local/lib/python3.5/site-packages下也有这个cv2.cpython-35m-x86_64-linux-gnu.so文件。于是我进入这个目录后:ln -s cv2.cpython-35m-x86_64-linux-gnu.so cv2.so 将那个文件软链接到cv2.so!这样就可以了。(在make install之后我没找到cv2.so文件差点崩溃放弃,还好我没放弃,终于等到你哈哈哈)
看可以了:
看我的这个opencv的python接口只能在python3.5下使用!不过还有个小小的问题就是numpy.core.multiarray failed to import!这个只要不用到就没事,总体import cv2成功!
我查了下numpy.core.multiarray failed to import 这个错误是因为版本不对,我cmake里无论是python3.5还是python2.7用的都是/usr/lib64/python2.7/site-packages/numpy/core/include/numpy!这是不对的!版本不对问题。(你们看之前cmake时的PYTHON2_NUMPY和PYTHON3_NUMPY的路径都是2.7下的那个numpy,而那个numpy其实是1.7版本的,所以这个numpy文件夹只适合python2.7,所以安装完毕时它自动跑去了python2.7的site-packages下面,而python3.5下面就没有!!!!!所以这是不对的!!!!python2.7和python3.5用的都是python2.7的numpy,而我现在是搞Python3.5+OpenCV3.2)我看了网上说python3.5.0的需要numpy1.11.1!一个办法是下载安装numpy1.11.1后重新返回cmake那里写正确的PYTHON_NUMPY路径!或者另一个办法,下载安装新的合适的numpy1.11.1后移入python3.5下面(不知道行不,试试。即我想在不cmake的前提下搞正确就必须待会儿安装好numpy1.11.1后要将numpy1.11.1下的文件夹numpy复制进我之前cmake时指定的PYTHON3_NUMPY的路径中。。。。其实这里心里清楚python2.7和python3.5用的都是Python3.5的numpy,不过我想此时应该不会错。因为我现在弄的Python3.5+OpenCV3.2,只不过是去python2.7的文件夹下读取自己的python3.5的numpy。。。有点绕哦,其实就是爸爸B和妈妈A要找自己的儿子,之前AB将自己的儿子numpy寄养在家庭C中,邻居D也有一个儿子叫numpy。AB非常需要自己的儿子,结果却去D中将numpy接回家(也就是我开始错误的原因),后来知道自己搞错了,于是去C中将自己的儿子接回来(正确))。
我暂时先用方法2,自己去官网下载了一个num1.11.1,然后python3 setup.py install ,结果:
看这里一会儿有2.7,一会儿有3.5,我想应该是命令冲突,于是我去usr/lib/下将python2.7文件夹删掉,然后将python3.5的文件夹复制进来。再运行python3 setup.py install 就不报错了。numpy1.11.1成功安装。numpy1.11.1下出现numpy这个文件夹,将这个文件夹复制到之前cmake时自己指定的目录下。
然后:
看吧 验证了我所想,搞出来了。正确!!!!!!!!!!!!!!!!!!!!!!!!!!!!
即现在电脑里有2个版本:2.7的没有opencv接口,3.5的有opencv3.2接口:
总结:
1、电脑里有多个版本的python没关系的,但python命令关联到哪个版本关系到能否使用yum等命令!最好还是python命令关联的是2.7版本,python3命令关联的是3.5版本,以防止混乱。
2、不一定要事先下载numpy文件,先检查电脑里的python的目录下有没有numpy文件夹,检查numpy文件夹中是否有_numpyconfig.h文件,如果有,这一步就省略;否则手动下一个全面的numpy。
3、cmake时一定要注意填写PYTHON_***相关的目录,尽量都填完并且核对。特别是PYTHON_NUMPY,一定要注意PYTHON2和PYTHON3的版本拥有不同的numpy!
4、在make install之后出来的是cv2.cpython-35m-x86_64-linux-gnu.so而不是cv2.so,不要惊慌,软链接一下就好。
其实就是第3步最最重要!这一步正确,后面就不用像我这样麻烦了。当然尽量不要多版本搞在一个电脑中。
有一个感想:问题是不会无缘无故爆出来的,必定有其对应原因,学会联系错误提示,找到可能的解决办法,办法往往不止一种。
精简步骤如下:
1、安装你想安装的python版本,系统自带的python2.7,我自己又下了python3.5并安装;
2、下载每个python版本对应的numpy(注意是对应的,不能搞错版本)并安装(也许某个版本会安装不上,这个就要自己想办法解决,就像我上面那样),放在每个python的site-packages下;
3、下载你想下载的opencv版本并解压;
4、在cmake下进行opencv编译,注意所有的PYTHON_***后面的路径自己尽量补全,而且每个版本的PYTHON_NUMPY路径一定要核对正确。configure–configure–generate
5、输入相应的指令,如python或python3进入python环境,import cv2 看是否报错。如果安装正确,是不会报任何错的!
然而,还有一个更简单的方法,即用Anaconda3-4.2.0来装python3.5和opencv3.4,这样更方便:
1、下载Anaconda3-4.2.0-Linux-x86_64.sh并默认安装
2、pip install opencv-contrib-python 如果time out 就直接去https://pypi.python.org/pypi/opencv-contrib-python/3.4.0.12 下载对应版本。如果想要3.2的直接在https://pypi.python.org/pypi/opencv-contrib-python/3.2.0.8下载对应版本
3、import cv2即可。 有什么问题可以参考 https://pypi.python.org/pypi/opencv-contrib-python/3.2.0.8