学习OpenCV 4:基于Python的算法实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4.2 案例5:OpenCV裁剪编译

OpenCV包含很多模块,功能齐全,但是对于很多读者来说,这些模块并不一定都用得上,而且编译了这些模块之后,二进制库会比较大。对于很多软件部署来说,这会造成资源的浪费,因此,本节介绍OpenCV的裁剪编译,裁剪不必要的模块使之不参与编译。

在CMake配置(Configure)完成之后,读者可以勾选要编译的模块,如图1.38所示。

img

图1.38

OpenCV的所有模块都有对应的编译选项,如core模块对应的编译选项是BUILD_opencv_core,图1.38是OpenCV的默认编译配置。对于某些读者来说,可能只需使用OpenCV读/写图像,做一些基本的变换操作,此时,只需编译core、imgproc和imgcodecs这3个模块即可。如果读者只需编译C++的二进制库文件,不需要编译其他语言的包,则可以去掉其他语言选项,如BUILD_JAVA语言选项。

本案例裁剪后只保留core、imgproc和imgcodecs这3个模块的编译选项,读者记得勾选“BUILD_opencv_world”复选框,编译的Release结果如图1.39所示。

img

图1.39

在图1.39中,opencv_world450.dll的大小为36997KB,对比图1.37中的opencv_world450.dll(58516KB),可以看出,裁剪后占用空间变小,方便部署使用。

读者也可以通过编译命令控制模块是否参与编译,如不编译dnn模块,可以将其开关关掉:

同理,其他模块可以通过-DBUILD_opencv_*=OFF关闭编译选项,通过-DBUILD_opencv_*=ON打开编译选项。