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:
- Thư mục chứa các file định nghĩa header .h và .hpp định nghĩa prototype của thư viện OpenCV.
- Thư mục chứa library của thư viện OpenCV bao gồm các thư viện liên kết động (Dynamic Library hay Shared Library) và thư viện liên kết tĩnh (Static Library).
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.
Giao diện Xcode sau khi tạo xong project.
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 Paths và Library 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.