iOS项目仅使用核心接口时如何减小OpenCV框架体积?
OpenCV iOS 裁剪瘦身方案
你当前用到的API仅属于OpenCV core核心模块和iOS平台imgcodecs绑定部分,完全可以通过自定义编译裁剪掉所有冗余模块,最终体积可压缩到10MB以内。
1. 准备编译依赖
- 安装Xcode并确保Command Line Tools已配置,终端执行
xcode-select --install可快速安装 - 安装CMake,通过Homebrew执行
brew install cmake即可完成
2. 获取对应版本源码
下载OpenCV 4.5.3版本的源码压缩包,不要使用官方预编译的framework包——官方预编译包是全模块、全架构打包,所以才会有接近500MB的体积。
3. 修改编译参数裁剪冗余内容
解压源码后,进入platforms/ios目录,修改build_framework.py编译脚本的编译参数:
- 核心裁剪参数:添加
-DBUILD_LIST=core,imgcodecs,仅编译你需要的core核心模块和图片转换依赖的imgcodecs模块,其余所有模块(imgproc、features2d、calib3d、dnn等)都会被排除 - 额外体积优化参数:
-DBUILD_EXAMPLES=OFF # 关闭示例编译 -DBUILD_TESTS=OFF # 关闭测试用例编译 -DBUILD_PERF_TESTS=OFF # 关闭性能测试编译 -DBUILD_opencv_world=OFF # 不打包全模块单文件 -DBUILD_SHARED_LIBS=OFF # 编译静态库 -DIOS_ENABLE_BITCODE=OFF # 若项目不需要bitcode可关闭,进一步压缩体积 -DIOS_ARCH="arm64" # 仅保留需要的架构,现在上线的iOS应用仅需要arm64架构即可,不需要模拟器架构、旧设备架构的话直接指定即可
4. 执行编译生成自定义framework
在platforms/ios目录下执行修改后的编译脚本,等待编译完成就能得到裁剪后的opencv2.framework。
5. 替换项目依赖
把项目中原有的官方预编译framework替换为你自己编译的裁剪版,清理项目缓存后重新编译即可,你用到的UIImageToMat、MatToUIImage、cv::Mat、cv::Vec4所有API都可以正常运行,不会有功能缺失。
内容的提问来源于stack exchange,提问作者sagarthecoder
相关产品推荐
相关产品推荐

