从源代码构建OpenCV 3.4 - 未生成CV2.so - Ubuntu16.04

时间:2017-12-27 13:11:00

标签: python opencv ubuntu-16.04

这不是我第一次构建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图书馆的名字吗?

2 个答案:

答案 0 :(得分:1)

我在生成Python 2.7绑定时遇到了同样的问题。通过手动检查opencv/CMakeLists.txt文件找到解决方案。我认为转换Python 3的变量可能会解决您的问题。

症状

在开始构建opencv之前,您已经可以通过检查包含cv2.soTo 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

请注意python2python3最终是如何显示为不可用的。

修复(如果需要,修改python3的python2引用)

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

TL; DR

编辑您的命令:

  • 删除:-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