2013-04-02 48 views
7

Tôi đang cố gắng giảm kích thước opencv2.framework cho ios. Dự án của tôi chỉ sử dụng các mô-đun lõi, imgproc và highgui. Làm thế nào tôi có thể biên dịch với chỉ những mô-đun? hoặc là có một thay thế cho việc giảm kích thước?Biên tập tùy chỉnh Opencv

Cảm ơn.

Trả lời

1

Chỉ cần xóa mô-đun khỏi thư mục mô-đun và xóa các dòng khỏi tệp tiêu đề. Và biên dịch. Trước khi làm điều đó đọc CMakeLists.txt cho các phụ thuộc.

Ví dụ: đối với mô-đun highgui;

ocv_define_module(imgproc opencv_core) 
2

Tính v2.4.6 OpenCV có một kịch bản tùy chỉnh python để giảm bớt công việc (plateforms> ios> build_framework.py)

Bạn chỉ cần thêm cờ trên dòng cmake để thực hiện một tùy chỉnh biên dịch.

Ví dụ: Tôi chỉ cần các imgproc lib và bao gồm tất cả các tiêu đề vào các kho lưu trữ, cmake của tôi bây giờ ressembles này:

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) 

Đừng quên thêm lõi và thế giới lib như họ là bắt buộc. Thực thi tập lệnh python> profite.

Sau đó thêm lib theo cách thủ công vào dự án của bạn và xóa các tiêu đề nhập pesky còn lại trong tiêu đề> opencv.hpp và bạn nên làm tốt!

1

Tôi đã gặp sự cố này ngay bây giờ với phiên bản 3.1 và câu trả lời của nebuto đã đóng, nhưng chưa hoàn thành. Sau đây đã có thể tạo ra kết quả mong muốn bằng cách cập nhật tệp 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 

Bản cập nhật này cũng bao gồm hai mô-đun mới dường như chưa tồn tại trong 2.4.6.

Để biết thêm một số khoản tiết kiệm, bạn có thể xóa cài đặt i386 cho các bản dựng mô phỏng nằm ở cuối tệp. Nếu ứng dụng của bạn là iOS 9 trở lên và bạn muốn bỏ qua các thiết bị 32 bit, bạn cũng có thể chọn tùy chọn armv7.

b = Builder(args.opencv, args.contrib, 
    [ 
     ("armv7", "iPhoneOS"), 
     ("armv7s", "iPhoneOS"), 
     ("arm64", "iPhoneOS"), 
     #("i386", "iPhoneSimulator"), 
     ("x86_64", "iPhoneSimulator"), 
    ]) 
b.build(args.out) 
Các vấn đề liên quan