Opencv自定义编译

erv*_*nux 9 opencv ios

我正在尝试减少ios的opencv2.framework大小.我的项目只使用core,imgproc和highgui模块.如何只使用那些模块进行编译?还是有减少尺寸的替代方案?

谢谢.

Cod*_*der 5

我现在用版本3.1遇到了这个问题,而nebuto的回答很接近,但截至目前还不完整.以下是通过更新build_framework.py文件生成所需的结果.

def getCMakeArgs(self, arch, target):
    args = [
        "cmake",
        "-GXcode",
        "-DBUILD_SHARED_LIBS=OFF",
        "-DBUILD_opencv_core=ON",
        "-DBUILD_opencv_imgcodecs=OFF",
        "-DBUILD_opencv_imgproc=ON",
        "-DBUILD_opencv_world=OFF",
        "-DBUILD_opencv_gpu=OFF",
        "-DBUILD_opencv_calib3d=OFF",
        "-DBUILD_opencv_contrib=OFF",
        "-DBUILD_opencv_features2D=OFF",
        "-DBUILD_opencv_flann=OFF",
        "-DBUILD_opencv_highgui=ON",
        "-DBUILD_opencv_legacy=OFF",
        "-DBUILD_opencv_ml=OFF",
        "-DBUILD_opencv_nonfree=OFF",
        "-DBUILD_opencv_objdetect=OFF",
        "-DBUILD_opencv_photo=OFF",
        "-DBUILD_opencv_stitching=OFF",
        "-DBUILD_opencv_video=OFF",
        "-DBUILD_opencv_videoio=OFF",
        "-DBUILD_opencv_videostab=OFF",
        "-DAPPLE_FRAMEWORK=ON",
        "-DCMAKE_INSTALL_PREFIX=install",
        "-DCMAKE_BUILD_TYPE=Release",
    ]
    return args
Run Code Online (Sandbox Code Playgroud)

此更新还包括两个似乎在2.4.6中不存在的新模块.

为了节省一些额外费用,您可以删除位于文件底部的模拟器版本的i386设置.如果您的应用程序是iOS 9及更高版本,并且您希望省略32位设备,您也可以取出armv7选项.

b = Builder(args.opencv, args.contrib,
    [
        ("armv7", "iPhoneOS"),
        ("armv7s", "iPhoneOS"),
        ("arm64", "iPhoneOS"),
        #("i386", "iPhoneSimulator"),
        ("x86_64", "iPhoneSimulator"),
    ])
b.build(args.out)
Run Code Online (Sandbox Code Playgroud)


erv*_*nux 1

只需从模块文件夹中删除模块并从头文件中删除包含行即可。然后进行编译。在执行此操作之前,请阅读 CMakeLists.txt 以获取依赖项。

例如,对于highgui模块;

ocv_define_module(imgproc opencv_core)
Run Code Online (Sandbox Code Playgroud)