2013-04-02 5 views
7

Ich versuche, opencv2.framework Größe für iOS zu reduzieren. Mein Projekt verwendet nur Core-, Imgproc- und Highgui-Module. Wie kann ich nur mit diesen Modulen kompilieren? Oder gibt es eine Alternative zur Größenreduzierung?Opencv Custom Compile

Danke.

Antwort

1

Löschen Sie einfach Module aus Modulen Ordner und entfernen Sie Include-Zeilen aus den Header-Datei. Und kompilieren. Bevor Sie das tun, lesen Sie CMakeLists.txt nach Abhängigkeiten.

Zum Beispiel für Highgui-Modul;

ocv_define_module(imgproc opencv_core) 
2

Ab v2.4.6 OpenCV hat ein Skript benutzerdefinierte Python die Arbeit (plateforms> ios> build_framework.py)

Sie müssen nur hinzufügen Flaggen auf der Cmake Linie zu erleichtern eine benutzerdefinierte machen kompilieren.

Zum Beispiel: Ich brauchte nur die lib imgproc und alle Header in das Archiv aufgenommen, jetzt ist mein Cmake ressembles dies:

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) 

nicht zu Vergessen Sie den Kern und die Welt lib hinzufügen, Sie sind obligatorisch. Führen Sie das Python-Skript> profite aus.

Danach fügen Sie die lib manuell zu Ihrem Projekt und entfernen Sie die lästigen Import-Header links in den Kopfzeilen> opencv.hpp und Sie sollten gut gehen!

1

Ich habe dieses Problem jetzt mit Version 3.1, und Nebuto Antwort ist in der Nähe, aber nicht ab sofort abgeschlossen. Das Folgende konnte das gewünschte Ergebnis durch Aktualisieren der Datei build_framework.py erzeugen.

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 

Dieses Update enthält auch zwei neue Module, die in 2.4.6 nicht vorhanden sind.

Für einige zusätzliche Einsparungen können Sie wahrscheinlich die i386-Einstellungen für Simulator-Builds entfernen, die sich am Ende der Datei befinden. Wenn Ihre App iOS 9 und höher ist und Sie 32-Bit-Geräte auslassen möchten, können Sie auch die Option armv7 verwenden.

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