如何为python版本2和3构建OpenCV?

时间:2017-08-15 13:47:47

标签: python linux opencv build cmake

OpenCV linux install docBuilding OpenCV from Source Using CMake部分,它被称为运行

之类的命令
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

同时,给出了python的参数:

[optional] Building python. Set the following python parameters:
PYTHON2(3)_EXECUTABLE = <path to python>
PYTHON_INCLUDE_DIR = /usr/include/python<version>
PYTHON_INCLUDE_DIR2 = /usr/include/x86_64-linux-gnu/python<version>
PYTHON_LIBRARY = /usr/lib/x86_64-linux-gnu/libpython<version>.so
PYTHON2(3)_NUMPY_INCLUDE_DIRS = /usr/lib/python<version>/dist-packages/numpy/core/include/

可以轻松地为这两个版本的Python设置其中一些参数:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D PYTHON2_EXECUTABLE=/usr/bin/python -D PYTHON3_EXECUTABLE=/usr/bin/python3  ..

但另一个是含糊不清的

PYTHON_INCLUDE_DIR = /usr/include/python<version>

是否可以同时为两个版本的Python构建?

3 个答案:

答案 0 :(得分:1)

不,在Python 2和Python 3中,对二进制模块的绑定(从C编译)是不同的。不能在Python 2和Python 3中使用相同的构建库。

但您可以使用不同的CMAKE_INSTALL_PREFIX值运行Python 2的构建指令,然后运行Python 3。

答案 1 :(得分:1)

我建议将此guide作为安装参考。

但是通常,您要做的就是安装两个版本的python,然后运行安装脚本。无需手动指定python路径,cmake会找到它们。

附带了最近的OpenCV安装输出的屏幕截图: terminal screenshot, python paths

答案 2 :(得分:0)

截至2018年12月,我能够在我的Ubuntu16.04计算机上使用CUDA,FFMpeg和TIFF编译最新的OpenCV版本(也可以与Caffe一起使用),并可以在Python2.7和3.5中运行它。 this post激发了这个构建的灵感,所以对他们表示敬意!

克隆最新的存储库:

请注意,两者必须在同一发行版中,否则cmake会抱怨。确保同时克隆两个:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

配置和构建:

首先,创建标准的构建环境:

cd opencv
mkdir build
cd build

然后,以下cmake命令对我有用:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
             -D CMAKE_INSTALL_PREFIX=/usr/local \
             -D INSTALL_C_EXAMPLES=ON \
             -D OPENCV_EXTRA_MODULES_PATH=<LOCATION_OF_YOUR_OPENCV_CONTRIB>/modules \
             -D BUILD_EXAMPLES=ON \
             -D BUILD_opencv_python2=ON \
             -D WITH_FFMPEG=1 \
             -D WITH_TIFF=ON \
             -D WITH_CUDA=ON \
             -D CUDA_GENERATION=Pascal \
             -D ENABLE_FAST_MATH=1 \
             -D CUDA_FAST_MATH=1 \
             -D WITH_CUBLAS=1 \
             -D WITH_LAPACK=OFF \
             -D PYTHON2_EXECUTABLE=/usr/bin/python \
             -D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \
             -D PYTHON2_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
             -D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/local/lib/python2.7/dist-packages/numpy/core/include \
             -D PYTHON3_EXECUTABLE=/usr/bin/python3 \
             -D PYTHON3_INCLUDE_DIR=/usr/include/python3.5 \
             -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so \
             -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/dist-packages/numpy/core/include \
             -D INSTALL_PYTHON_EXAMPLES=ON ..

请注意,您必须设置<LOCATION_OF_YOUR_OPENCV_CONTRIB>(克隆它的位置),并且可能必须根据系统的配置调整PYTHON2PYTHON3标志。

我收到了一些警告(不确定那有多严重),但是它发生了:一段时间后,您应该会看到类似的东西

--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done

制作并安装

同样,标准make -j<NUM_CORES> && sudo make install在这里起作用。确保将-j调整为您的CPU内核数,以加快编译过程。之后,python命令

import cv2

在Python 2和3中都可以使用。希望这会有所帮助!
安德烈斯