Cấu trúc OpenCV

Cấu trúc opencv

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 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.

  1. 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,…
  2. core Project chính của OpenCV vì cv::Mat được khai báo trong đây. Bắt buộc phải có
  3. 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.
  4. 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.
  5. flann Tìm kiếm vật thể bằng cách so khớp các keypoint 2D của vật thể
  6. highgui Vẽ các GUI như cửa sổ cv::imshow(), trackbar. Bắt buộc phải có
  7. 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ó
  8. 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ó
  9. js Js chính là java script, dùng để nhúng vào website
  10. ml các thuật toán của Machine Learning như SVM, KNN,…
  11. objdetect Detect object dùng Cascade
  12. photo Xử lý ảnh chụp tương tự lightroom: chỉnh tone màu, HDR,…
  13. shape Tìm các hình cơ bản như tam giác, tứ giác, vuông,…
  14. stitching Ghép nhiều ảnh thành ảnh panorama
  15. superres Super Resolution: nâng cao resolution của ảnh bằng phương pháp nội suy
  16. video Xử lý video
  17. videoio Load file video
  18. videostabVideo stabilization: sửa video quay bị rung
  19. 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

  1. ippicv Intell IPP, dùng để tăng tốc độ xử lý ảnh
  2. ittnotify thu thập data trong quá trình sử dụng, tìm hiểu thêm ITT
  3. libjasper định dạng hiếm gặp, không quan trọng
  4. libjpeg-turbo đọc ảnh jpeg, từ version 3.4 trở đi libjpeg thay bằng libjpeg-turbo Bắt buộc phải có
  5. libpng đọc ảnh png
  6. libtiff đọc ảnh tiff
  7. libwebp Webp là định dạng ảnh mới, nhẹ hơn jpeg, hay dùng trên website
  8. openexr định dạng ảnh EXR, ít khi sử dụng
  9. 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
  10. 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

  • aruco AR – thực tế tăng cường
  • bgsegm Background segment: tách nền sử dụng thuật toán Background subtraction
  • bioinspired làm tăng độ tương phản & xác định chuyển động trong 1 chuỗi hình ảnh liên tiếp nhau.
  • ccalib Custom calibration: có thêm option từ calib3d
  • cnn_3dobj Convolutional Neural Networks để phân lớp 3D object
  • cvv debug hình ảnh trong các quá trình xử lý. Tuy nhiên cần có QT trong quá trình make
  • dnns_easily_fooled Đây không phải là thư viện, đây chỉ là 1 chứng minh cho việc DNN (Deep Neural Network) dễ dàng bị đánh lừa bởi ảnh trừu tượng
  • dnn_objdetect Phát hiện vật thể bằng Deep Neural Network
  • dpm Deformable Part-based Models dùng để phát hiện vật thể
  • face nhận diện khuôn mặt
  • freetype vẽ text lên ảnh với font bất kỳ tùy chọn
  • fuzzy phục hồi ảnh
  • hdf Dùng để đọc ghi file HDF. File HDF có cấu trúc phức tạp, không giới hạn dung lượng, khả năng đọc ghi nhanh, thường dùng trong Big Data.
  • hfs tách ảnh khỏi nền
  • img_hash Dùng để kiểm tra ảnh có giống nhau hay không bất kể định dạng và kích thước. Giống như mắt người sẽ nhận dạng ảnh giống nhau bởi nội dung chứ không quan tâm đến giá trị nhị phân lưu trữ.
  • line_descriptor tìm đường thẳng trong ảnh
  • matlab sử dụng opencv với matlab
  • optflow xác định hướng chuyển động của vật thể
  • ovis
  • phase_unwrapping
  • plot vẽ biểu đồ
  • reg Image registration
  • rgbd Color data with depth processing sử dụng dữ liệu từ máy Kinect. Hình ảnh được truyền về kèm theo kênh Depth (ngoài RGB) để tính toán độ sâu của vật thể.
  • saliency tìm vật thể nổi bật nhất trong ảnh
  • sfm Tạo bản đồ 3D (hay 3D model) bằng ảnh chụp từ nhiều góc độ của vật thể
  • stereo Xử lý ảnh stereo. Ảnh stereo là ảnh tạo ra sự khác biệt giữa mắt trái và mắt phải để cảm nhận được hình ảnh 3D bên trong. (Mình đã cố gắng thử nhưng không thể nào nhìn được 3D, không biết người khác thì sao)
  • structured_light Scan vật thể 3D bằng cách tạo ra các vân ánh sáng, từ đó xác định được hình khối của vật thể cần scan.
  • surface_matching Tìm kiếm vật thể 3D bằng dữ liệu từ các máy scan 3D trong môi trường thực tế. Giống như tìm vật thể 2D trong ảnh.
  • text phát hiện vị trí text trong ảnh và đọc text
  • tracking bám theo vật thể di chuyển
  • xfeatures2d nâng cao của project feature2D
  • ximgproc nâng cao của project imgproc
  • xobjdetect nâng cao của project objdetect
  • xphoto nâng cao của project photo
  • Leave a Reply