Search…

Cài Đặt Thư Viện OpenCV trong Xcode

07/11/20205 min read
Hướng dẫn cài đặt thư viện OpenCV vào Xcode để sử dụng trong các dự án Xcode.

Bài viết hướng dẫn cài đặt thư viện OpenCV vào project C++ trong Xcode trên hệ điều hành macOS.

Sau khi cài đặt thành công thư viện OpenCV sẽ có 2 thư mục:

Nguyên tắc sử dụng các thư viện trong hầu hết các thư viện viết bằng C/C++

Thư viện viết bằng C++ như OpenCV, FFmpeg, ImageMagick, LIBSVM, FreeType có 1 số nguyên tắc sau:

  • Sau khi build các thư viện này đều phát sinh ra 2 thư mục chứa header và lib.
  • Chương trình muốn sử dụng lib này phải khi báo đường dẫn tới 2 thư mục này và phải link các thư viện liên kết.

Dưới đây là 2 thư mục chứa lib OpenCV sau khi cài đặt trên máy.

  • /usr/local/include: đường dẫn chứa header của thư viện.
  • /usr/local/lib: đường dẫn chứa lib của thư viện.

Các thư viện openCV bắt đầu với tiền tố libopencv.

Thư mục chứa các header của OpenCV /usr/local/include

ImageMagick-6                    itcl2Tc100.h                 libavutil            pcre_scanner.h            telThread.h
SDL2                             itclDecls.h                  libltd               pcre_stringpiece.h        tclTomMath.h
ass                              itclInt.h                    libpng16             pcrecpp.h                 tclTomMathDecls.h
cairo                            itclIntDecls.h               libpostproc          pcrecpparg.h              tdbc.h
fakemysql.h                      itclMigrate2Tclcore.h        libswresample        pcreposix.h               tdbcDecls.h
fakepg.h                         itcltclIntStubsFcn.h         libswscale           pixman-1                  tdbcInt.h
fakesgl.h                        jconfig.h                    ltdl.h               png.h                     tiff.h
fontconfig                       jerror.h                     lzma                 pngconf.h                 tiffconf.
freetype2                        jmorecfg.h                   Izma.h               pnglibconf.h              tiffio.h
fribidi                          jpeglib.h                    mysqlStubs.h         pqStubs.h                 tiffio.hxx
gio-unix-2.0                     libavcodec                   node                 tcl.h                     tiffvers.h
glib-2.0                         libavdevice                  odbcStubs.h          tclDecls.h                tk.h
gobject-introspection-1.0        libavfilter                  opencv               tcl00.h                   tkDecls.h
harfbuzz                         libavformat                  opencv2              tclooDecls.h              tkPlatDecls.h
itcl.h                           libavresample                pcre.h               tclplatDecls.h            xvid.h

Thư mục chứa lib của OpenCV /usr/local/lib

ImageMagick                        libcairo-gobject.a                         libopencv_calib3d.dylib                 libpcre32.dylib
cairo                              libcairo-gobject.dylib                     libopencv_core.3.1.0.dylib              libpcrecpp.o.dylib
cmake                              libcairo-script-interpreter.2.dylib        libopencv_core.3.1.dylib                libpcrecpp.a
dtrace                             libcairo-script-interpreter.a              libopencv_core.dylib                    libpcrecpp.dylib
gio                                libcairo-script-interpreter.dylib          libopencv_features2d.3.1.0.dylib        libpcreposix.0.dylib
girepository-1.0                   libcairo.2.dylib                           libopencv_features2d.3.1.dylib          libpcreposix.a
glib-2.0                           libcairo.a                                 libopencv_features2d.dylib              libpcreposix.dylib
gobject-introspection              libcairo.dylib                             libopencv_flann.3.1.0.dylib             libpixman-1.0.dylib
itc14.0.0                          libfontconfig.1.dylib                      libopencv_flann.3.1.dylib               libpixman-1.a
libMagick++-6.916.6.dylib          libfontconfig.a                            libopencv_flann.dylib                   libpixman-1.dylib
libMagick++-6.916.a                libfontconfig.dylib                        libopencv_highgui.3.1.0.dylib           libpng.a
libMagick++-6.916.dylib            libfreetype.6.dylib                        libopencv_highgui.3.1.dylib             libpng.dylib
libMagick++-6.Q16.la               libfreetype.a                              libopencv_highgui.dylib                 libpng16.16.dylib
libMagickCore-6.916.2.dylib        libfreetype.dylib                          libopencv_imgcodecs.3.1.0.dylib         libpng16.a
libMagickCore-6.916.a              libfreetype.la                             libopencv_imgcodecs.3.1.dylib           libpng16.dylib
libMagickCore-6.Q16.dylib          libfribidi.o.dylib                         libopencv_imgcodecs.dylib               libpostproc.54.0.100.dylib
libMagickCore-6.Q16.la             libfribidi.dylib                           libopencv_imgproc.3.1.0.dylib           libpostproc.54.dylib
libMagickWand-6.916.2.dylib        libgio-2.0.0.dylib                         libopencv_imgproc.3.1.dylib             libpostproc.a
libMagickWand-6.Q16.a              libgio-2.0.a                               libopencv_imgproc.dylib                 libpostproc.dylib
libMagickWand-6.Q16.dylib          libgio-2.0.dylib                           libopencv_m1.3.1.0.dylib                libswresample.2.1.100.dylib
libMagickWand-6.Q16.la             libgirepository-1.0.1.dylib                libopencv_ml.3.1.dylib                  libswresample.2.dylib
libSDL2-2.0.0.dylib                libgirepository-1.0.a                      libopencv_ml.dylib                      libswresample.a
libSDL2.a                          libgirepository-1.0.dylib                  libopencv_objdetect.3.1.0.dylib         libswresample.dylib
libSDL2.dylib                      libglib-2.0.0.dylib                        libopencv_objdetect.3.1.dylib           libswscale.4.1.100.dylib
libSDL2.la                         libglib-2.0.a                              libopencv_objdetect.dylib               libswscale.4.dylib
libSDL2_test.a                     libglib-2.0.dylib                          libopencv_photo.3.1.0.dylib             libswscale.a
libSDL2main.a                      libgmodule-2.0.0.dylib                     libopencv_photo.3.1.dylib               libswscale.dylib
libass.5.dylib                     libgmodule-2.0.a                           libopencv_photo.dylib                   libtc18.6.dylib
libass.a                           libgmodule-2.0.dylib                       libopencv_shape.3.1.0.dylib             libtclstub8.6.a
libass.dylib                       libgobject-2.0.0.dylib                     libopencv_shape.3.1.dylib               libtiff.5.dylib
libavcodec.57.48.101.dylib         libgobject-2.0.a                           libopencv_shape.dylib                   libtiff.a
libavcodec.57.dylib                libgobject-2.0.dylib                       libopencv_stitching.3.1.0.dylib         libtiff.dylib
libavcodec.a                       libgthread-2.0.0.dylib                     libopencv_stitching.3.1.dylib           libtiffxx.5.dylib
libavcodec.dylib                   libgthread-2.0.a                           libopencv_stitching.dylib               libtiffxx.a
libavdevice.57.0.101.dylib         libgthread-2.0.dylib                       libopencv_superres.3.1.0.dylib          libtiffxx.dylib
libavdevice.57.dylib               libharfbuzz-gobject.o.dylib                libopencv_superres.3.1.dylib            libtk8.6.dylib
libavdevice.a                      libharfbuzz-gobject.a                      libopencv_superres.dylib                libtkstub8.6.a
libavdevice.dylib                  libharfbuzz-gobject.dylib                  libopencv_ts.a                          libxvidcore.4.dylib
libavfilter.6.47.100.dylib         libharfbuzz-icu.0.dylib                    libopencv_video.3.1.0.dylib             libxvidcore.a
libavfilter.6.dylib                libharfbuzz-icu.a                          libopencv_video.3.1.dylib               node_modules
libavfilter.a                      libharfbuzz-icu.dylib                      libopencv_video.dylib                   pkgconfig
libavfilter.dylib                  libharfbuzz.0.dylib                        libopencv_videoio.3.1.0.dylib           python2.7
libavformat.57.41.100.dylib        libharfbuzz.a                              libopencv_videoio.3.1.dylib             sqlite3.7.15.1
libavformat.57.dylib               libharfbuzz.dylib                          libopencv_videoio.dylib                 tcle

Tích hợp OpenCV vào Xcode

Khởi tạo Project OpenCV trong Xcode

Mở chương trình Xcode, tạo project C++ mới.

  • Chọn Create a new Xcode Project.
  • Chọn Tab masOS và chọn Project kiểu Command Line Tool.
  • Bổ sung tên của Project, chọn language là C++ và tạo project.
Tạo Xcode project.

Giao diện Xcode sau khi tạo xong project.

Tích hợp OpenCV vào Xcode.

Thêm đường dẫn đến thư mục Header và thư mục Lib của OpenCV

Sau khi tạo xong Project OpenCV với Xcode, vào phần Build Settings của project để setup thư viện OpenCV vào Xcode.

  • Chọn Tab Build Settings và nhập ô search để tìm kiếm 2 mục là Header Search PathsLibrary Search Paths.
  • Tại Header Search Paths điền vào đường dẫn chứa file header của thư viện OpenCV là /usr/local/include.
  • Tại Library Search Paths điền vào đường dẫn chứa file lib của thư viện OpenCV là /usr/local/lib.

Link các thư viện trong OpenCV

Sau khi chỉ định 2 đường dẫn đến 2 thư mục của thư viện OpenCV, tiến hành link các thư viện liên kết vào chương trình như sau.

Ở mục tìm kiếm gõ vào "flags" để tìm kiếm mục Other Link Flags.

Điền chuỗi sau và mục Other Link Flags

-lopencv_calib3d -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videoio -lopencv_videostab

Đến đây đã hoàn thành việc setup thư viện OpenCV vào Xcode trên hệ điều hành macOS.

Viết chương trình sử dụng OpenCV

Viết thử 1 chương trình để kiểm tra setup thư viện thành công hay không?

#include 1 số module của thư viện OpenCV.

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/video/video.hpp>
#include <opencv2/ml/ml.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/imgproc/imgproc.hpp>

In ra version hiện tại của OpenCV đang sử dụng.

//
//  main.cpp
//  OpenCVTest
//
//  Created by NguyenNghia on 11/11/16.
//  Copyright © 2016 nguyennghia. All rights reserved.
//

#include 
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/video/video.hpp>
#include <opencv2/ml/ml.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/imgproc/imgproc.hpp>

int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout <<  CV_VERSION << std::endl;
    return 0;
}

Kết quả:

3.1.0
Program ended with exit code: 0

Chương trình chạy thành công và in ra version OpenCV đang sử dụng là 3.1.0.

Setup thư viện OpenCV trên các hệ điều hành khác

Về nguyên tắc sử dụng thư viện chỉ cần chỉ định 2 đường dẫn tới thư mục chứa header và lib của thư viện và link các thư viện vào chương trình.

OpenCV trên Linux

Với Linux có thể có các IDE như Code::Blocks để viết chương trình OpenCV, việc setting trong Code::Blocks hoàn toàn tương tự trên Xcode.

Hoặc có thể sử dụng CMake để sinh ra makefile nếu build source bằng Terminal (CLion sử dụng CMake cho quá trình build mã nguồn C/C++).

cmake_minimum_required(VERSION 3.6)
project(opencvproject)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

#chỉ định đường dẫn tới header
include_directories(/usr/local/include)
#chỉ định đường dẫn tới thư viện
link_directories(/usr/local/lib)

set(SOURCE_FILES source/main.cpp)
add_executable(opencvproject ${SOURCE_FILES})
#link các lib của thư viện OpenCV
target_link_libraries(${PROJECT_NAME} -lopencv_calib3d -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videoio -lopencv_videostab)

OpenCV trên Windows

Các setup thư viện trên hệ điều hành Windows dành cho Visual Studio cũng tương tự như trên Xcode.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024