开发的时候有的项目可能用的opencv,然后我们去官网下载那些已经编译好的opencv,少则100m + 多则200m+,但是我们可能只用了其中的几个方法,很多代码就是没用的了(这里我不知道打成framework以后,还能不能自动删除没用的代码,没去验证,感觉不会),这里教大家如果去裁剪opencv
1.下载cmake
cmake 必不可少, 直接去官网下载mac版本就行 cmake,然后安装就行了
2.opencv的组成
首先我们要知道 opencv 是由好多个模块组成的,下面我们来看一下,究竟是由哪些模块组成
- (1) 首先去github 下载 源码
git clone https://github.com/opencv/opencv.git
或者直接下载zip
ps 我这里用的2.4.13版本,因为这个版本的脚本 比较友好(主要是我google 到了怎么改)
-
(2) 我们来看看opencv 模块的目录
很明显 core 是所有模块都需要依赖的, 那比如说我在开发中可能只用到来imgproc 模块,那我编译的时候只需要编译 core imgproc模块就行了,其实这里还以来了一个 world 模块,还有一些第三方的东西
3.编辑脚本
脚本的目录为 platforms/ios/build_framework.py
这个就是我们需要编辑的脚本
cmakeargs = ("-GXcode " +
"-D BUILD_SHARED_LIBS=OFF "+
"-D BUILD_opencv_core=ON "+
"-D BUILD_opencv_imgproc=ON "+
"-D BUILD_opencv_world=ON "+
"-D BUILD_opencv_gpu=OFF "+
"-D BUILD_opencv_calib3d=OFF "+
"-D BUILD_opencv_contrib=OFF "+
"-D BUILD_opencv_features2D=OFF "+
"-D BUILD_opencv_flann=OFF "+
"-D BUILD_opencv_highgui=OFF "+
"-D BUILD_opencv_legacy=OFF "+
"-D BUILD_opencv_ml=OFF "+
"-D BUILD_opencv_nonfree=OFF "+
"-D BUILD_opencv_objdetect=OFF "+
"-D BUILD_opencv_photo=OFF "+
"-D BUILD_opencv_stitching=OFF "+
"-D BUILD_opencv_video=OFF "+
"-D BUILD_opencv_videostab=OFF "+
"-DCMAKE_BUILD_TYPE=Release " +
"-DCMAKE_TOOLCHAIN_FILE=%s/platforms/ios/cmake/Toolchains/Toolchain-%s_Xcode.cmake " +
"-DCMAKE_INSTALL_PREFIX=install") % (srcroot, target)
可以看到 只有core imgproc world 是ON 其他都是OFF
targets = [("armv7s", "iPhoneOS"),
("arm64", "iPhoneOS"),
("x86_64", "iPhoneSimulator")]
把没用的指令集干掉,不要模拟器 把x86的干掉
3.执行脚本
cd 到脚本的目录 直接** python build_framework + 输出路径 ** 就行了 ,过一会framework就打好了,我们看到3个指令集只有40m
PS 遇到编译出错 error: implicit declaration of function 'read' is invalid in C99 ...
找到 3rdparty/zlib 下的3个文件 加入#include <unistd.h>
三个文件分别为gzwrite.c gzread.c gzlib.c
问题一:enum { NO, GAIN, GAIN_BLOCKS }; Expected identifier
只要把NO修改成 NO_EXPOSURE_COMPENSATOR 或 NO_EXPOSURE_COMPENSATOR = 0
问题二:core.hpp header must be compiled as C++ 或 base.hpp header must be compiled as C++
解决:把调用了OpenCV文件的.m文件修改为.mm,以及viewController.m修改为viewController.mm