3.2.4 构建和编译OpenCV 4
在这一步中,我们将首先使用CMake构建OpenCV 4,之后使用make命令进行编译,这一步将会比较耗时间。
首先,在~/opencv目录下创建一个build子目录:
$ cd ~/opencv $ mkdir build $ cd build
使用CMake来构建OpenCV 4:
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D BUILD_TESTS=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D BUILD_EXAMPLES=OFF ..
注意
OPENCV_ENABLE_NONFREE=ON这个选项,把它设置为True时,可以使用SIFT、SURF以及其他具有专利的算法。
在这里,要确认OPENCV_EXTRA_MODULES_PATH的目录是我们之前下载的opencv_contrib的解压目录,如果读者在之前的小节中执行了重命名的步骤,则无须修改。如果没有重命名,则需要根据自己的情况把路径改为opencv_contrib的解压目录。
CMake执行完毕后,终端输出应当如图3-6所示,请在这里停下来确认一下Interpreter的路径是否为正确的Python 3路径,以及Numpy是否被成功安装在了虚拟环境中。
图3-6 确认是否为解压目录对应的路径
在编译之前,我们需要扩大一下交换空间(swap space),这样可以使得在编译OpenCV 4时使用树莓派的全部4核,节约时间。首先,打开文件/etc/dphys-swapfile:
/etc/dphys-swapfile: $ sudo nano /etc/dphys-swapfile
然后编辑CONF_SWAPSIZE:
# set size to absolute value, leaving empty (default) then uses computed value # you most likely don't want this, unless you have an special disk situation # CONF_SWAPSIZE=100 CONF_SWAPSIZE=2048
这样我们就把交换空间的大小由100MB增加到2048MB了。重启swap服务:
$ sudo /etc/init.d/dphys-swapfile stop $ sudo /etc/init.d/dphys-swapfile start
注意
增加swap空间的大小可能会烧毁micro-SD卡,这是由于Flash存储器对数据写入具有一定的限制。当然,短时间内扩大交换空间是允许的。无论怎样,希望读者可以备份系统文件,如果在安装OpenCV和Python的过程中出现树莓派的存储卡崩溃的情况,则需要读者重新刻录系统。
接下来开始编译:
$ make -j4
参数-j4的命令表示使用4核来编译,如果这一步命令报错,尝试去掉“-j4”再运行。
编译完成且没有报错以后,执行如下命令:
$ sudo make install $ sudo ldconfig
最后,不要忘记修改交换空间的大小。
$ sudo nano /etc/dphys-swapfile
编辑CONF_SWAPSIZE变量:
# set size to absolute value, leaving empty (default) then uses computed value # you most likely don't want this, unless you have an special disk situation CONF_SWAPSIZE=100 # CONF_SWAPSIZE=2048
这样我们就把交换空间的大小由2048MB改回100MB了。重启swap服务:
$ sudo /etc/init.d/dphys-swapfile stop $ sudo /etc/init.d/dphys-swapfile start
最后我们将OpenCV 4链接至创建的Python 3虚拟环境中,这一步十分重要,我们需要把OpenCV 4链接至虚拟环境的site-packages。为了保证链接的路径适应于你的树莓派,在输入下列命令的过程中建议使用Tab键自动补全目录:
$ cd ~/.virtualenvs/py3cv4/lib/python3.5/site-packages/ $ ln -s /usr/local/python/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so $ cd ~