这不是我第一次构建opencv,但是,我不确定为什么没有生成cv2.so.我使用anaconda,这是我的cmake系列:
cmake -D CMAKE_INSTALL_PREFIX=../output -D PYTHON_EXECUTABLE=/home/b.safwat/anaconda2/envs/opencv3.4/bin/python WITH_FFMPEG=YES -enable-shared --disable-static -D BUILD_NEW_PYTHON_SUPPORT=ON ..
输出没有显示numpy,我怀疑这部分:
-- Python (for build):
/home/<user>/anaconda2/envs/<myenv>/bin/python3
-- Pylint:
/home/<user>/anaconda2/bin/pylint (ver: 1.6.4, checks: 113)
但是,我安装了numpy并且运行正常。
是否有人成功构建了最新版本?他们改变了cv2.so
图书馆的名字吗?
答案 0 :(得分:1)
我在生成Python 2.7绑定时遇到了同样的问题。通过手动检查opencv/CMakeLists.txt
文件找到解决方案。我认为转换Python 3的变量可能会解决您的问题。
在开始构建opencv之前,您已经可以通过检查包含cv2.so
或To be built
的行的cmake命令输出来判断是否将获取python绑定文件Unavailable
。在我的情况下,我有:
Unavailable: cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv dnn_modern hdf java matlab ovis python2 python3 sfm viz
请注意python2
和python3
最终是如何显示为不可用的。
在CMakeLists.txt
中有一行包含
BUILD_opencv_python2
它旁边是一串生成cmake命令输出的行。它们很有用,因为它们告知了cmake期望的变量。特别是,对numpy的引用是构建python绑定所必需的。从这些方面来看,我了解到对于opencv 3.4.1,我必须使用:
来调用cmake-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include
-D PYTHON2_NUMPY_VERSION=1.12.1
我可以从您的命令中看到您使用已弃用的BUILD_NEW_PYTHON_SUPPORT
标志。对于opencv 3.4,标志名称已更改,并且根据CMakeLists.txt
的内容,新变量名称为:
-D BUILD_opencv_python3=ON
我还在另一条SO评论中读到,如果没有以下标志(未经测试),将不会生成cv2.so
:
-D BUILD_EXAMPLES=ON
编辑您的命令:
-D BUILD_NEW_PYTHON_SUPPORT=ON
-D BUILD_opencv_python3=ON -D BUILD_EXAMPLES=ON -D PYTHON3_NUMPY_INCLUDE_DIRS=<path_to_numpy>/core/include -D PYTHON2_NUMPY_VERSION=<your_numpy_version>
答案 1 :(得分:1)
我找到了确切的解决方法here,而通过添加以下几行来确切地解决了我的问题:
-D PYTHON_DEFAULT_EXECUTABLE=<path/to/desired/python/environment>/bin/python3.5
-D PYTHON_INCLUDE_DIRS=<path/to/desired/python/environment>/include/python3.5m
-D PYTHON_EXECUTABLE=<path/to/desired/python/environment>/bin/python3.5
-D PYTHON_LIBRARY=<path/to/desired/python/environment>libpython3.5m.so.1