Sau khi make OpenCV từ source code thành công sẽ được solution OpenCV. Bài này sẽ mô tả các công dụng các project bên trong OpenCV để các bạn include vừa đủ. Không thừa không thiếu, mọi thứ vừa đủ là tốt nhất.
Nếu tự make OpenCV bằng Cmake không thành công các bạn có thể sử dụng source mình đã make sẵn.
OpenCV 3.2.0 build cho Visual Studio 2015
OpenCV 3.4.2 build cho Visual Studio 2015
Tổng quát
OpenCV do mình build có sự thay đổi đôi chút so với cấu trúc của package gốc. Bao gồm:
– Thêm nhóm project contrib
– Đưa file cvconfig.h và opencv_modules.hpp ra ngoài nằm cùng với file solution *.sln để dễ config
– Thay đổi các đường dẫn tuyệt đối thành macro, thí dụ: D:\opencv\ thành $(SolutionDir)
– Loại bỏ các project perf và test dùng để test hiệu suất OpenCV
– Tạo các file *.props chứa các config tối thiểu cho 1 dự án
– Sửa các đường dẫn output lib, exe cho phù hợp với việc release sản phẩm
Do đó bài này viết trên solution OpenCV đã được build sẵn bên trên để dễ sử dụng.
Các nhóm project
Ngoài folder include chỉ chứa các file header *.h thì còn lại 3 folder. Mỗi folder chứa các nhóm project có cùng loại:
- modules: các modules chính của OpenCV
- 3rdparty: các project bên thứ 3 viết ra được tổ chức OpenCV include vào
- contrib: các project do người dùng đóng góp
Nhóm modules
Nhóm này chứa các project chính của OpenCV, chứa các thuật toán do tổ chức OpenCV viết ra. Có 4 project bắt buộc phải có là: core, highgui,imgcodecs và imgproc.
- calib3d Camera Calibration and 3D Reconstruction. Công dụng là tìm tọa độ trong không gian 3D của vật thể. Ứng dụng như dùng để hiệu chuẩn camera khi ống kính bị méo góc (fisheye), chống rung cho camera (calibrate). Tìm tọa độ 3D của bàn cờ vua trong không gian 3 chiều,…
- core Project chính của OpenCV vì cv::Mat được khai báo trong đây. Bắt buộc phải có
- dnn Deep neural network hay còn gọi là Deep Learning. Bản thân nó chỉ dùng để kết nối tới các framework khác như Caffe, TensorFlow, Torch, Darknet,… chứ không implement code.
- features2d Dùng để lấy các đặc trưng 2D của vật thể bằng các giải thuật như SIFT, FAST, KAZE, AKAZE,… Từ đó tìm ra các keypoint của vật thể để training nhận dạng.
- flann Tìm kiếm vật thể bằng cách so khớp các keypoint 2D của vật thể
- highgui Vẽ các GUI như cửa sổ cv::imshow(), trackbar. Bắt buộc phải có
- imgcodecs Đọc ảnh *.jpg, *.png, *.webp,… bằng cách gọi các project trong nhóm 3rdparty Bắt buộc phải có
- imgproc Chứa các hàm xử lý, biến đổi,… hình ảnh như dilate, erode, blur,… Bắt buộc phải có
- js Js chính là java script, dùng để nhúng vào website
- ml các thuật toán của Machine Learning như SVM, KNN,…
- objdetect Detect object dùng Cascade
- photo Xử lý ảnh chụp tương tự lightroom: chỉnh tone màu, HDR,…
- shape Tìm các hình cơ bản như tam giác, tứ giác, vuông,…
- stitching Ghép nhiều ảnh thành ảnh panorama
- superres Super Resolution: nâng cao resolution của ảnh bằng phương pháp nội suy
- video Xử lý video
- videoio Load file video
- videostabVideo stabilization: sửa video quay bị rung
- viz Đồ họa 3D tương tự OpenGL
Nhóm 3rdparty
Các project trong nhóm 3rd chỉ cần include khi có nhu cầu sử dụng đọc loại ảnh khác nhau. Trong này có 2 project bắt buộc có là zlib và libjpeg
- ippicv Intell IPP, dùng để tăng tốc độ xử lý ảnh
- ittnotify thu thập data trong quá trình sử dụng, tìm hiểu thêm ITT
- libjasper định dạng hiếm gặp, không quan trọng
- libjpeg-turbo đọc ảnh jpeg, từ version 3.4 trở đi libjpeg thay bằng libjpeg-turbo Bắt buộc phải có
- libpng đọc ảnh png
- libtiff đọc ảnh tiff
- libwebp Webp là định dạng ảnh mới, nhẹ hơn jpeg, hay dùng trên website
- openexr định dạng ảnh EXR, ít khi sử dụng
- protobuf là 1 giao thức văn bản mới (như XML, JSON,…) được Google tạo ra, chỉ include khi sử dụng DNN
- zlib Nén và giải nén file Bắt buộc phải có
Nhóm contrib
Các project trong này do người dùng OpenCV đóng góp, nổi tiếng nhất là face để nhận diện khuôn mặt. Một số project lạ mình sẽ bổ sung sau