OpenCV 安装方法总结

OpenCV Python 版本

如果用 anaconda,直接:

conda install -c conda-forge opencv

Mac 用户注意:建议安装稍微老一些的版本

Reference: https://stackoverflow.com/questions/60254766/opencv-giving-an-error-whenever-import-cv2-is-used

conda install 默认安装最新版本,目前是4.5.0,但是该版本在 import cv2 时会有问题类似:

ImportError: dlopen(.../anaconda3/envs/graphics/lib/python3.8/site-packages/cv2.cpython-38-darwin.so, 2): Symbol not found: _mp_get_memory_functions
...

因此,建议安装一个稍老一点的版本,例如:

conda install -c conda-forge opencv=4.2.0

经测试,没有问题。

OpenCV C++ 版本

这里讲述在 Linux/Mac 中安装 OpenCV 的方法。

1. 简单快速安装 OpenCV

下面是一个简单的安装流程,不涉及任何和 python 有关的环境配置等步骤。以在 Mac 中安装 OpenCV 3.4.8 为例,Linux 下安装方法其实完全相同。

cd /usr/local/Cellar/
mkdir -p opencv/3.4.8/repo
cd opencv/3.4.8/repo

## clone the repo
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

## checkout to corresponding version
## 这一步也可以直接手动下载你想要安装的版本的 source code 再解压到本地,就不用 checkout 分支了。
cd opencv
git checkout 3.4.8 # or some other version you want to install
cd ../opencv_contrib/
git checkout 3.4.8 # or some other version you want to install

cd ../..
## 下面只是一个 cmake options 的例子。另一个更详细的例子参见本文后面的 "编译 OpenCV 源码时使用的 CMake 命令"一章。
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON -DOPENCV_ENABLE_NON_FREE=ON repo/opencv  -DOPENCV_EXTRA_MODULES_PATH=repo/opencv_contrib/modules

make -j7 && make install

## 记得链接一下 OpenCV 目录到 cmake,方便将来查找
ln -s /usr/local/Cellar/opencv/3.4.8/  /usr/local/lib/cmake/opencv3.4.8

注意:

  • 上面方法是直接将 OpenCV 和 OpenCV-contrib 安装到了你所在的当前目录/usr/local/Cellar/opencv/3.4.8里面。可以设置-DCMAKE_INSTALL_PREFIX=<install_path>来修改安装位置,最后用 ln 链接时修改安装目录即可。
  • -DOPENCV_EXTRA_MODULES_PATH记得指向 opencv_contrib 路径下的 modules 文件夹;
  • OPENCV_ENABLE_NON_FREE=ON这个很重要,增加编译 non-free 库(内部有例如 SIFT 等工具)。
  • 也可以关掉编译例子-DBUILD_EXAMPLES=OFF

其余相关的一些 FLAGS:

  • -DWITH_FFMPEG=ON:增加 ffmpeg 支持
  • -DCMAKE_CXX_FLAGS="-std=c++11"
  • -DBUILD_SHARED_LIBS=ON:编译动态库

2. 详细安装

上面的简单流程并未涉及 python 虚拟环境配置。这里以 Mac 安装 OpenCV 4.1.2 为例。

详细安装流程主要参考这个教程一步一步来就行:Mac 平台 OpenCV4.1.2 环境搭建。该链接是从零开始安装的,图文并茂,并且还有安装后的测试。不过,该链接更像是这个英文链接的中文翻译:Install OpenCV 4 on macOS

下面总结一下这个教程中的步骤并补充一些细节。

2.1 安装 XCode, Homebrew, Python3, pip 等

感觉这几个通常都已经提前安装过了。参考上面给出的链接即可。

2.2 建立并配置 python 虚拟环境(Optional)

这一步其实是可选的,好处是你可以接下来在这个虚拟环境中安装你想要的 OpenCV 版本,方便进行版本管理,例如你有多个版本的 OpenCV 时。不过个人认为,你只有一个版本或者完全不需要版本管理时,这个步骤完全没必要,跳过即可

原流程链接使用的版本工具是 virtualenvwrapper,具体步骤这里就不解释了。这里给出一些有关 virtualenvwrapper 的使用方法以及可能遇到的问题。

安装 virtualenvwrapper 时可能会显示某个路径没有权限。此时,在 sudo 后面增加 -H 参数:

sudo -H pip3 install virtualenv virtualenvwrapper

配置 zshrc 环境时找不到 virtualenvwrapper.sh 的位置

笔者的电脑中,virtualenvwrapper.sh 并不在默认的 /usr/local/bin 路径下。此时,可以通过

sudo find / -name virtualenvwrapper.sh

寻找该文件的路径。笔者的路径是:

/Library/Frameworks/Python.framework/Versions/3.8/bin/virtualenvwrapper.sh

将该路径替换默认路径,添加到你的 ~/.zshrc 配置文件中,教程里面有添加方法。

virtual environment 常见操作

可以按照教程推荐的,新命名一个环境名,例如 py3cv4 之类。常见的几个命令:

mkvirtualenv test # 新建一个名为 test 的环境
mkvirtualenv test --python=python3 # 也可以指定环境
lsvirtualenv # 列出全部环境
workon test # 进入该环境
deactivate # 退出环境
rmvirtualenv test # 移除该环境

有关 virtualenvwrapper 的使用可以参考:python环境神器virtualenvwrapper安装与使用

2.3 开始编译和安装 OpenCV

如果你没有跳过上一步 2.2,那么你可以按照原链接给出的方法,首先打开你建立的虚拟环境并在其中安装 OpenCV。如果跳过了 2.2,那么直接安装。

2.3.1 下载源码

wget -O opencv4.1.2.zip https://github.com/opencv/opencv/archive/4.1.2.zip
wget -O opencv_contrib4.1.2.zip https://github.com/opencv/opencv_contrib/archive/4.1.2.zip

这里第二个 opencv_contrib 是 OpenCV 的 extra modules,包含一些重要的 non-free 库等。

解压后随便放在同一个目录下,比如~/dev吧。然后在终端前进到该目录后,首先进入 opencv4.1.2 目录下,创建 build 目录并前进到该目录:

cd opencv-4.1.2
mkdir build
cd build

2.3.2 编译并安装

接下来,如果你使用了步骤 2.2 中的虚拟环境,那么使用如下的 cmake 命令:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/dev/opencv_contrib-4.1.2/modules \
    -D PYTHON3_LIBRARY=`python -c 'import subprocess ; import sys ; s = subprocess.check_output("python-config --configdir", shell=True).decode("utf-8").strip() ; (M, m) = sys.version_info[:2] ; print("{}/libpython{}.{}.dylib".format(s, M, m))'` \
    -D PYTHON3_INCLUDE_DIR=`python -c 'import distutils.sysconfig as s; print(s.get_python_inc())'` \
    -D PYTHON3_EXECUTABLE=$VIRTUAL_ENV/bin/python \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D BUILD_EXAMPLES=ON ..

如果你跳过了步骤 2.2(即没有虚拟环境),那么使用:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/dev/opencv_contrib-4.1.2/modules \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D BUILD_TIFF=ON \
    -D BUILD_EXAMPLES=ON ..

注意的几点:

  • 其实上面两者的区别就是是否指定 python 的路径。如果是虚拟环境则需要显示指定,否则系统会默认找到你安装的 python3 的位置(当然你显式指定也行)。
  • 两个重要选项的设置:OPENCV_EXTRA_MODULES_PATH路径就是你的 opencv_contrib 的路径的 modules 文件夹的位置,一定要设置好。另外,下面的 OPENCV_ENABLE_NONFREE=ON是打开包含 SIFT 等 non-free feature 库的支持(源码就在 opencv_contrib 中)。
  • 只用 python3,关闭了 python2;
  • CMAKE_INSTALL_PREFIX是将来安装 OpenCV 的路径,OpenCV 此时会被安装到 /usr/local 下面。另一个常见的安装路径是 /usr/local/Cellar
  • 在 Linux 中,可以增加一个:-DBUILD_TIFF=ON,否则有时候使用 OpenCV 时会出现和 TIFF 相关的错误。
  • BUILD_EXAMPLES 这个开不开无所谓。

接着,使用 make 来编译:

sudo make -j8

编译所需时间挺长的。成功后,安装:

sudo make install

这会将 OpenCV 安装到你设置的 CMAKE_INSTALL_PREFIX路径下。

你可以再检查一下你的 cmake 安装路径下有没有 opencv4 的 config 文件的目录:

 ls /usr/local/lib/cmake/opencv4

它通常应该存在并且包含了:

OpenCVConfig-version.cmake  OpenCVConfig.cmake          OpenCVModules-release.cmake OpenCVModules.cmake

如果该目录不存在,说明安装不完整,不妨检查一下。

如果你安装的是 OpenCV 3.4 的版本,那么有可能这些 config 文件只放在 OpenCV 安装目录下,并不会自动放在 cmake 目录中。如果这样,你可以显式链接一下就行,类似这样:

ln -s /usr/local/Cellar/opencv/3.4.8/  /usr/local/lib/cmake/opencv3.4.8

一个可能的编译错误

可能有的朋友在这一步会报错。找到新建的 build 目录下,说找不到这几个文件:

fatal error: boostdesc_bgm.i: No such file or directory

你可以 点击这里找到解决方法。个人的解决方法是,将下面的内容全部拷贝到 opencv_contrib-4.1.2 扩展库的 modules/xfeatures2d/src 目录下。

cd opencv-4.1.2
cp build/downloads/xfeatures2d/* ../opencv_contrib-4.1.2/modules/xfeatures2d/src

2.4 链接 OpenCV 到 python 虚拟环境 (optional)

这一步也是可选的,如果你跳过了步骤 2.2,那么也可以跳过这一步。如果你用的是全局的 python(无虚拟环境),那么安装 OpenCV4 成功后,它通常应该会自动连接到 python 了。

首先找到 python 安装目录,一般默认会在 /usr/local/lib 下(当然虚拟环境下会有例外),例如:

/usr/local/lib/python3.7

确认该目录下存在这个文件:cv2.cpython-37m-darwin.so,它通常在如下的目录中:

/usr/local/lib/python3.7/site-packages/cv2/python-3.7/cv2.cpython-37m-darwin.so

接下来将该文件链接到你的虚拟环境中。首先使用命令 workon py3cv4进入你的虚拟环境py3cv4。然后,使用which python3命令可以找到虚拟环境中 python 库的安装路径,并前进到该目录下。例如如下所示的目录:

cd /Users/ciggomac/.virtualenvs/cv/lib/python3.7

最后,链接刚刚找到的 cv2.cpython-37m-darwin.so 到你的虚拟环境中:

ln -s /usr/local/lib/python3.7/site-packages/cv2/python-3.7/cv2.cpython-37m-darwin.so  cv2.so

2.5 测试 OpenCV 安装

在 python3 中测试是否能正常打印 OpenCV 版本号:

python3
Python 3.7.4 (default, Sep  7 2019, 18:31:37)
[Clang 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.2'
>>>

Search

    Table of Contents