Giới thiệu
Ở bài trước mình đã hướng dẫn tổng quan về thư viện xử lý hình ảnh mã nguồn mở OpenCV (Open Source Computer Vision). Trong bài viết này mình sẽ hướng dẫn các bạn setup thư viện OpenCV vào project C++ trong Xcode trên hệ điều hành macOS.
Mặc định trong bài viết này là các bạn đã cài đặt thành công thư viện OpenCV và đã cài đặt IDE Xcode.
Sau khi cài đặt thành công thư viện OpenCV chúng ta sẽ có hai 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++
Mình đã sử dụng một số thư viện viết bằng C++ (OpenCV, Ffmpeg, ImageMagick, LibSVM, FreeType)và nhận ra một số nguyên tắc sau:
+ Sau khi build các thư viện này đều phát sinh ra hai thư mục chứa header và lib.
+ Chương trình của chúng ta muốn sử dụng lib này phải khi báo đường dẫn tới hai thư mục này và phải link các thư viện liên kết.
Dưới đây là hai thư mục chứa lib OpenCV sau khi cài đặt trên máy của mình.
Thư mục chứa các header /usr/local/lib
Các bạn để ý thấy thư mục opencv và opencv2
Thư mục chứa lib của thư viện OpenCV /usr/local/lib
Các bạn thấy các thư viện openCV bắt đầu với tiền tố libopencv
Khởi tạo Project OpenCV trong Xcode
Trước tiên chúng ta sẽ mở chương trình Xcode lên và tạo một project C++
Chọn Create a new Xcode Project
Chúng ta chọn Tab masOS và chọn Project kiểu Command Line
Ở đây chúng ta điền tiền của Project và chọn languge là C++ và nhấn next để Xcode tạo new project cho chúng ta
Giao diện Xcode sau khi tạo xong project
Thêm đường dẫn tới Header Folder OpenCV
Sau khi tạo xong Project OpenCV với Xcode chúng ta sẽ vào phần setting của project để setup thư viện OpenCV vào Xcode. Chúng ta làm như hình, chọ Tab Build Setting và gõ vào search vào ô tìm kiếm để tìm kiếm hai mục là Header Search Paths và Library Search Path
Header Library Paths chúng ta sẽ điền vào đường dẫn chứa file header của thư viện OpenCV. Đường dẫn của mình là /usr/local/include.
Thêm đường dẫn tới Library Folder OpenCV
Tiếp theo chúng ta sẽ thêm đường dẫn tới thư mục chứa các thư viện liên kết của thư viện OpenCV. Và điền vào mục Library Search Paths. Đường dẫn của mình là /usr/local/lib
Hình ảnh sau khi đã chỉ định hai đường dẫn của thư viện OpenCV
Link các thư viện trong OpenCV
Sau khi chỉ định hai đường dẫn hai thư mục của thư viện OpenCV, tiếp theo chúng ta 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 chúng ta gõ vào “flags” để tìm kiếm mục Other Link Flags
Chúng ta điền vào chuổi sau và mục Other Link Flags
1 |
-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 |
Vậy là chúng ta đã hoàn thành việc settup thư viện OpenCV vào Xcode trên hệ điều hành macOS. Tiếp theo chúng ta sẽ viết thử một chương trình để kiểm tra chúng ta settup thư viện thành công hay không.
Viết chương trình sử dụng OpenCV
Include một số module của thư viện OpenCV
1 2 3 4 5 6 7 8 9 |
#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> |
Và đây là in ra version hiện tại của OpenCV mà chúng ta đang sử dụng.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// // main.cpp // OpenCVTest // // Created by NguyenNghia on 11/11/16. // Copyright © 2016 nguyennghia. All rights reserved. // #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> int main(int argc, const char * argv[]) { // insert code here... std::cout << CV_VERSION << std::endl; return 0; } |
Kết quả sau khi chạy chương trình trên
1 2 |
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
Settup 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úng ta chỉ cần chỉ định hai đường dẫn tới thư mục chứa header và library của thư viện và link các thư viện vào chương trình của chúng ta.
Trên Linux:
Với Linux chúng ta có thể các IDE như Code Block để viết chương trình OpenCV. Và việc setting trong CodeBlock củng hoàn toàn tương tự trên Xcode.
Hoặc có thể sử dụng CMakeFiles để sinh ra makefile nếu build source bằng Termial. (Clion sử dụng CMakeFiles cho quá trình build mã nguồn C/C++).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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) |
Trên Windows
Các settup thư viện trên hệ điều hành Windows sử dụng Android Studio mình sẽ giới thiệu trong những bài viết sau.
Kết luận
Qua bài viết này mình đã hướng dẫn cho các bạn cài đặt thư viện OpenCV vào project C++ trong Xcode. Ở các bài viết tiếp theo chúng ta sẽ bắt đầu vào sử dụng OpenCV trong việc xử lý hình ảnh, nhận dạng.