这是一个质量较低的答案,但如果您已经尝试了十个小时并需要一些新的想法,它仍然非常有用。
这个问题花了我一整天的时间,我仍然不确定我是如何解决它的,但以下是一些指针,以防给出的答案本身无法帮助到你:
最初,我遵循
这个指南,可以概括如下:
sudo apt-get update && sudo apt-get upgrade && sudo apt-get install build-essential git cmake pkg-config libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk2.0-dev libatlas-base-dev gfortran
git clone https://github.com/Itseez/opencv.git && cd opencv &&git checkout 3.0.0
sudo apt-get install python2.7-dev && sudo apt-get install python3-dev
cd ~ && wget https://bootstrap.pypa.io/get-pip.py && sudo python get-pip.py
pip3.6 install numpy
cd ~/opencv && mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D INSTALL_PYTHON_EXAMPLES=ON
-D INSTALL_C_EXAMPLES=ON
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules
-D BUILD_EXAMPLES=ON ..
cd ~/opencv && mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D INSTALL_PYTHON_EXAMPLES=ON
-D INSTALL_C_EXAMPLES=ON
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules
-D BUILD_EXAMPLES=ON ..
我已经安装了Python 2.7和3.4,并在/usr/local/bin
中自己构建了Python 3.6。在遵循Aurelius' Answer并进行一些尝试后,我构建了这个cmake命令:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D BUILD_EXAMPLES=ON -D PYTHON_EXECUTABLE=/usr/local/bin/python3.6/ -D PYTHON_INCLUDE=/usr/local/include/python3.6m/ -D PYTHON_LIBRARY=/usr/local/lib/python3.6/ -D PYTHON_PACKAGES_PATH=/usr/local/lib/python3.6/site-packages/ -D PYTHON_NUMPY_INCLUDE_DIR=/usr/local/lib/python3.6/dist-packages/numpy/core/include/ -D PYTHON_INCLUDE_DIR=/usr/local/include/python3.6m/ -D PYTHON_LIBRARY=/usr/local/lib/ -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON3_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D BUILD_EXAMPLES=ON -D PYTHON3_INCLUDE=/usr/local/include/python3.6m/ -D PYTHON3_LIBRARY=/usr/local/lib/python3.6/ -D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.6/site-packages/ -D PYTHON3_NUMPY_INCLUDE_DIR=/usr/local/lib/python3.6/dist-packages/numpy/core/include/ -D PYTHON3_INCLUDE_DIR=/usr/local/include/python3.6m/ -D PYTHON3_LIBRARY=/usr/local/lib/ ..
请注意,这些中可能有很多是没有意义的。我一直在不停地尝试,直到找到可行的方法。
有些路径可以使用Python本身找到,例如
python3.6 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())"
或者直接在cmake命令中:
$ cmake .. \
-DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-DPYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))")
此时,CMake 找到了正确的 Python 解释器和库...但是随后失败了,称它们没有找到。我只能从记忆中引用错误,因为我无法在 tmux 中向后滚动足够远,并且我不想再次复制该错误。
OpenCV 发现不合适的版本“1.4”,但至少需要 3.6
解决方法是 通过修改文件 build/../cmake/OpenCVDetectPython.cmake
中的某些检查项,准确地告诉 CMake 您需要什么:
find_package( PythonInterp 3.6 REQUIRED )
find_package( PythonLibs 3.6 REQUIRED )
(请注意,这些已经过时)
仍然没有起作用,因为我设置了cmake标志-D PYTHON3_EXECUTABLE
。 这个电子邮件链 对于弄清楚问题很有帮助,并建议使用virtualenv作为替代解决方案。这可能是我应该从一开始就使用的。
PYTHON3_[PACKAGES|LIBRARY]
等操作。 - JohnAllen