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

Python OpenCV 3.4从源代码构建-未生成CV2.so-Ubuntu16.04,python,opencv,ubuntu-16.04,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

这不是我第一次构建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)
--Python(用于构建):
/主页//蟒蛇2/envs//bin/python3
--派林:
/住宅//水蟒2/bin/pylint(版本:1.6.4,支票:113)
但是,我已经安装了numpy,并且功能正常


是否有人成功构建了最新版本?他们是否更改了
cv2.so
library的名称

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

症状 在开始构建opencv之前,您已经可以通过检查包含要构建的
不可用的
行中的cmake命令输出来判断是否将获得python绑定文件
cv2.so
。就我而言,我有:

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
在结尾处显示为不可用

修复(如果需要,为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\u NEW\u PYTHON\u SUPPORT
标志。对于opencv 3.4,标志名称已更改,根据
CMakeLists.txt
的内容,新变量名称为:

-D BUILD_opencv_python3=ON
我还在另一个SO注释中读到,
cv2.SO
在没有以下标志(未测试)的情况下不会生成:

TL;博士 对命令的编辑:

  • 删除:
    -D BUILD\u NEW\u PYTHON\u SUPPORT=ON
  • 添加:
    -D BUILD\u opencv\u python3=ON-D BUILD\u EXAMPLES=ON-D python3\u NUMPY\u INCLUDE\u DIRS=/core/INCLUDE-D PYTHON2\u NUMPY\u VERSION=

我找到了确切的解决方案,通过添加以下行,我的问题得到了确切的解决:

-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
-D PYTHON\u DEFAULT\u可执行文件=/bin/python3.5
-D PYTHON_INCLUDE_DIRS=/INCLUDE/python3.5m
-D PYTHON_EXECUTABLE=/bin/python3.5
-D PYTHON_LIBRARY=libpython3.5m.so.1

它仍然不起作用,但是,您关于“不可用”的说明为我节省了一些时间,谢谢
-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