1
THƯ VIỆN OPENCV Open Source Computer Vision Library [1]
Đặng Vinh
Khoa Toán Tin Học – Đại học Khoa Học Tự Nhiên TPHCM
2
MỤC LỤC
MỤC LỤC ........................................................................................................................................ 2
Danh sách bảng biểu .......................................................................................................................... 3
Danh sách hình ảnh ........................................................................................................................... 3
Phần I. Giới thiệu ........................................................................................................................... 4
I.1. Tổng quan .............................................................................................................................. 4
I.2. Sơ lược về cấu trúc của thư viện OpenCV .............................................................................. 4
Phần II. Cài đặt trên Windows với Visual Studio C++ ................................................................. 7
II.1. Cài đặt phần mặc định ............................................................................................................ 7
II.2. Cài đặt phần mở rộng ........................................................................................................... 12
Phần III. Cài đặt trên Linux với ngôn ngữ C/C++ ........................................................................ 15
PHỤ LỤC ....................................................................................................................................... 17
THAM KHẢO ................................................................................................................................ 18
3
Danh sách bảng biểu Bảng 1 Mã nguồn chương trình sử dụng thư viện OpenCV .............................................................. 17
Danh sách hình ảnh Hình 1 Cửa sổ thông tin về hệ thống của Windows ............................................................................ 7
Hình 2 Cửa sổ các thuộc tính của hệ thống......................................................................................... 8
Hình 3 Cửa sổ hiệu chỉnh biến môi trường ......................................................................................... 8
Hình 4 Hộp thoại chỉnh sửa biến môi trường ...................................................................................... 9
Hình 5 Cửa sổ tạo một "Project" mới ................................................................................................. 9
Hình 6 Cửa sổ "Properties Page" ..................................................................................................... 10
Hình 7 Hộp thoại "Additional Include Directories" .......................................................................... 10
Hình 8 Hộp thoại"Additional Library Directories" ........................................................................... 11
Hình 9 Cửa sổ CMake ..................................................................................................................... 13
Hình 10 Hộp thoại chọn phiên bản Visual Studio ............................................................................. 13
Hình 11 Hộp thoại chọn trình biên dịch ........................................................................................... 13
Hình 12 Kết quả tạo "project" trên CMake ....................................................................................... 14
Hình 13 Hộp thoại cài đặt đường dẫn phần mở rộng ........................................................................ 14
4
Phần I. Giới thiệu
I.1. Tổng quan OpenCV (Open Source Computer Vision Library) là một thư viện mã nguồn mở về thị giác
máy tính và học máy. Thư viện được xây dựng để cung cấp nền tảng cho các ứng dụng thị
giác máy tính nhằm đẩy mạnh sự phát triển về hàm lượng tri thức máy tính trong các sản
phẩm thương mại. Nhờ giấy phép bản quyền BSD và được nhiều công ty lớn hàng đầu thế
giới như Google, Yahoo, Microsoft, Intel, IBM,… cùng đóng góp xây dựng thư viện,
OpenCV là một trong những công cụ mạnh và được sử dụng rộng rãi trong trường học cũng
như các công ty khởi nghiệp.
Thư viện OpenCV bao gồm nhiều giao diện dành cho C++, C, Python, Java, MATLAB và hỗ
trợ cho các hệ điều hành khác nhau như Windows, Linux, Android, MacOS. Trong phiên bản
OpenCV 3.1, giao diện sử dụng cho CUDA và OpenCL cũng đã được phát triển hoàn thiện.
OpenCV được viết nguyên bản bằng ngôn ngữ C++.
Trang chính thức: http://opencv.org
Nhóm phát triển OpenCV: http://itseez.com
I.2. Sơ lược về cấu trúc của thư viện OpenCV Thư viện OpenCV có thể được chia thành 2 phần (module) chính. Phần căn bản (basic) là mã
nguồn được nhóm phát triển xây dựng và kiểm định toàn diện, gồm các thuật toán đã được
thế giới công nhận và đánh giá dựa trên cơ sở lý thuyết chắc chắn. Phần mở rộng
(contribution) được nhiều tổ chức khoa học khác nhau trên thế giới đóng góp, gồm nhiều
thuật toán cập nhật được xây dựng dựa trên các công trình nghiên cứu, bài báo mới đăng
trong thời gian gần đây. Do vậy các thuật toán trong phần mở rộng có độ ổn định và tối ưu
không cao. Từ phiên bản 3.0, phần mở rộng được tách riêng không còn được gộp chung với
thư viện mặc định.
OpenCV là thư viện mã nguồn mở được đóng gói thành tập tin nén. Tùy vào phiên bản dành
cho các hệ điều hành khác nhau mà tập tin nén này có định dạng tương ứng. Thư viện
OpenCV cung cấp cho người dùng các cấu trúc dữ liệu, đối tượng và hàm bằng cách khai báo
nguyên mẫu (prototype) của chúng trong các tập tin thư viện C/C++ (*.h, *.hpp,…) và định
nghĩa chi tiết trong các tập tin mã nguồn (*.c, *.cpp). Với mức độ sử dụng OpenCV, ta chỉ
cần giải nén các tập tin đã được biên dịch sẵn rồi thực hiện các thao tác cài đặt đường dẫn cho
thích hợp để hệ điều hành tìm đến đúng vị trí của các tập tin thư viện. Ở mức độ cao hơn, nếu
muốn hiệu chỉnh sửa đổi thuật toán hay sử dụng phần mở rộng của OpenCV ta cần phải biên
dịch mã nguồn trực tiếp trên máy trước khi cài đặt.
5
Để cài đặt OpenCV cơ bản ta có thể sử dụng tập tin nhị phân mà nhóm phát triển đã biên dịch
sẵn. Ta truy cập vào địa chỉ http://opencv.org/downloads.html và chọn phiên bản dành cho hệ
điều hành thích hợp. Để cài đặt phần mở rộng (dành cho OpenCV 3.0 trở lên) ta cần có cả mã
nguồn của cả phần cơ bản và phần mở rộng. Chúng được công khai trên tài khoản Github của
nhóm phát triển theo đường dẫn http://github.com/opencv. Ngoài ra ta cũng có thể đóng góp
cho thư viện này bằng cách sử dụng tài khoản cá nhân trên Github và làm theo hướng dẫn của
nhóm phát triển.
Thư viện mã nguồn mở OpenCV gồm các thành phần nhỏ sau đây (tính đến phiên bản 3.1.0):
- Các thành phần chính:
o core. Các hàm cơ bản
o imgproc. Xử lý ảnh
o imgcodecs. Đọc và ghi tập tin ảnh
o videoio. Đọc và ghi đa phương tiện
o highgui. Giao diện người dùng bậc cao
o video. Phân tích video
o calib3d. Hiệu chuẩn thiết bị ghi hình và tái cấu trúc 3D
o features2d. Bộ khung các đặc trưng 2D
o objdetect. Nhận dạng đối tượng
o ml. Học máy
o flann. Gom nhóm và tìm kiếm trong nhiều chiều
o photo. Các thuật toán chụp ảnh
o stitching. Vá ảnh
o cudaarithm. Các toán tử trên ma trận
o cudabgsegm. Phân đoạn nền ảnh
o cudacodec. Mã hóa/giải mã video
o cudafeatures2d. Phát hiện và mô tả đặc trưng
o cudafilters. Lọc ảnh
o cudaimgproc. Xử lý ảnh với CUDA
o cudalegacy. Hỗ trợ Legacy
o cudaobjdetect. Phát hiện đối tượng
o cudaoptflow. Dòng quang học
o cudastereo. Thư viện âm thanh
o cudawarping. Bẻ cong ảnh
o cudev. Tầng thiết bị
o shape. Khác biệt hình học và so sánh
o superres.Siêu phân giải
o videostab. Ổn định video
o viz. Hiển thị 3D
- Các thành phần mở rộng:
o aruco. Phát hiện ArUco Marker
o bgsegm. Các phương pháp phân đoạn đối tượng mới
6
o bioinspired. Các mô hình thị giác sinh học và các công cụ phái sinh
o ccalib. Tùy chọn hiệu chuẩn mẫu cho tái cấu trúc 3D
o cvv. GUI cho thao tác bắt lỗi trực quan của các chương trình thị giác máy tính
o datasets. Thư viện hỗ trợ làm việc với các bộ dữ liệu khác nhau
o dnn. Bộ thư viện mạng neural học sâu
o dpm. Các mô hình biến dạng từng phần
o face. Nhận dạng mặt người
o fuzzy. Xử lý ảnh dựa vào lý thuyết mờ
o hdf. Nhập xuất dữ liệu cho định dạng HDF (Hierarchical Data Format)
o line_descriptor. Mô tả nhị phân cho các đường thẳng trích chọn từ một ảnh
o matlab. Liên kết với MATLAB
o optflow. Các thuật toán dòng quan học
o plot. Hàm vẽ cho dữ liệu ma trận
o reg. Đăng kí ảnh
o rgbd. Xử lý chiều sâu trong hệ màu RGB
o saliency. API xử lý vùng lồi trên ảnh
o sfm. Cấu trúc từ chuyển động
o stereo. Các thuật toán tín hiệu nổi tương tự
o structured_light. API cho tính cấu trúc của ánh sáng
o surface_matching. Khớp bề mặt
o text. Phát hiện và nhận dạng chữ trong cảnh tự nhiên
o tracking. Các phương pháp theo vết
o xfeatures2d. Tính năng đặc trưng 2D mở rộng
o ximgproc. Xử lý ảnh mở rộng
o xobjdetect. Phát hiện đối tượng mở rộng
o xphoto. Các phương pháp xử lý hình ảnh nâng cao
7
Phần II. Cài đặt trên Windows với Visual Studio C++
II.1. Cài đặt phần mặc định Tất cả các phiên bản của OpenCV được công khai trên trang chủ đều là phần mặc định của
thư viện này. Ta sẽ sử dụng phiên bản OpenCV 2.4.13 để minh họa quá trình cài đặt phần
mặc định của thư viện với Visual Studio.
Ta có thể tải phiên bản OpenCV 2.4.13 cho Windows bằng cách truy cập vào đường dẫn đã
http://opencv.org/downloads.html rồi nhấp vào liên kết “OpenCV for Windows” trong mục
“VERSION 2.4.13”. Sau khi tải thành công ta sẽ có tập tin “OpenCV-2.4.13.exe”. Đây chính
là tập tin nhị phân mà nhóm phát triển đã biên dịch và cung cấp sẵn cho người dùng trong đó
chứa đầy đủ phần mặc định của OpenCV.
Để cài đặt OpenCV sử dụng cho Visual Studio ta thực hiện các bước sau:
- Bước 1: Mở tập tin “OpenCV-2.4.13.exe”, chọn đường dẫn đến thư mục muốn cài
đặt. Ở đây để dễ trình bày ta kí hiệu đường dẫn giải nén OpenCV là $DIRECTORY.
Sau khi giải nén, toàn bộ các tập tin của OpenCV sẽ nằm trong thư mục có đường dẫn
$DIRECTORY\opencv\.
- Bước 2: Cài đặt biến môi trường của Windows:
Nhấp trỏ phải vào “Computer” (hoặc “My Computer”) chọn “Properties”. Với
Windows 7 cửa sổ “System” hiện ra như sau (Hình 1):
Hình 1 Cửa sổ thông tin về hệ thống của Windows
Nhấp chọn “Advanced system settings”. Cửa sổ cài đặt hiện ra, ta chọn thẻ
“Advanced” (Hình 2):
8
Hình 2 Cửa sổ các thuộc tính của hệ thống
Nhấp chọn nút “Environment Variables…”. Cửa sổ “Environment Variables” hiện
lên (Hình 3). Tại vùng “System variables” chọn đến biến “Path”.
Hình 3 Cửa sổ hiệu chỉnh biến môi trường
9
Tại hộp thoại chỉnh sửa biến môi trường “Path” (Hình 4), ta thêm “;” vào cuối dòng
và viết thêm vào mục “Variable value” đường dẫn thư mục chứa các tập tin *.dll
của OpenCV.
Hình 4 Hộp thoại chỉnh sửa biến môi trường
Nội dung viết thêm có dạng
$DIRECTORY\opencv\build\$PLATFORM\$VCXX\bin\
Trong đó $PLATFORM là x86 hoặc x64 tương ứng với hệ điều hành 32bit hay
64bit; $VCXX là vc10 nếu ta dùng Visual Studio 2010, vc11 với Visual Studio
2012, vc12 với phiên bản 2013 và vc14 với phiên bản Visual Studio 2015.
Lưu ý rằng phiên bản OpenCV 3.0 trở lên dành cho Windows chỉ hỗ trợ nền tảng
64bit và vc12 hoặc cao hơn.
- Bước 3: Hiệu chỉnh Visual Studio:
Mở Visual Studio, tạo một “Project” bằng ngôn ngữ C++ mới (Hình 5). Đây chính
là “Project” mà ta cần OpenCV để phát triển.
Hình 5 Cửa sổ tạo một "Project" mới
Sử dụng tổ hợp phím Ctr+Alt+L hoặc nhấp chọn “View” > “Solution Explorer” để
gọi hộp thoại “Solution Explorer”.
Tại hộp thoại “Solution Explorer” nhấp trỏ phải vào tên “Project” chọn “Properties”
hoặc sử dụng tổ hợp phím Alt+Enter. Cửa sổ “Properties Page” hiện lên (Hình 6).
10
Hình 6 Cửa sổ "Properties Page"
Tại mục “Configuration” chọn “All configurations”. Ở cây danh sách bên trái ta
chọn “Configuration Properties” > “C/C++” > “General”. Tiếp theo ta thêm vào
mục “Additional Include Directories” các đường dẫn sau (Hình 7) và chọn vào ô
“Inherit from parents and project defaults”:
$DIRECTORY\opencv\build\include
$DIRECTORY\opencv\build\include\opencv
$DIRECTORY\opencv\build\include\opencv2
Hình 7 Hộp thoại "Additional Include Directories"
11
Vẫn tại nội dung của “All configurations”, ta chọn ở cây danh sách bên trái
“Configuration Properties” > “Linker” > “General”. Tiếp theo ta thêm vào mục
“Additional Library Directories” các đường dẫn sau (Hình 8) và chọn vào ô
“Inherit from parents and project defaults”:
$DIRECTORY\opencv\build\$PLATFORM\$VCXX\lib
$DIRECTORY\opencv\build\$PLATFORM\$VCXX\staticlib
Hình 8 Hộp thoại"Additional Library Directories"
Chuyển mục “Configuration” thành “Debug”, ở cây danh sách bên trái chọn
“Configuration Properties” > “Linker” > “Input”. Ta thêm vào mục “Additional
dependencies” các dòng sau và chọn vào ô “Inherit from parents and project
defaults”:
opencv_calib3d2413d.lib
opencv_contrib2413d.lib
opencv_core2413d.lib
opencv_features2d2413d.lib
opencv_flann2413d.lib
opencv_gpu2413d.lib
opencv_highgui2413d.lib
opencv_imgproc2413d.lib
opencv_legacy2413d.lib
opencv_ml2413d.lib
opencv_nonfree2413d.lib
opencv_objdetect2413d.lib
opencv_ocl2413d.lib
opencv_photo2413d.lib
opencv_stitching2413d.lib
opencv_superres2413d.lib
12
opencv_ts2413d.lib
opencv_video2413d.lib
opencv_videostab2413d.lib
Ta để ý rằng đây chính là tên của các tập tin thư viện có trong thư mục với đường
dẫn $DIRECTORY\opencv\build\$PLATFORM\$VCXX\lib. Đồng thời hậu
tố trong tên các tập tin này cũng bao gồm thông tin phiên bản của OpenCV (ví dụ:
2413 tương ứng phiên bản 2.4.13) và chữ “d” cuối cùng để chỉ đây là các thư viện
dành cho đế độ biên dịch “Debug”. Như vậy tùy phiên bản mà tên tập tin sẽ thay đổi
đồng thời sẽ có nhiều hơn hoặc ít hơn danh sách tên ở trên.
Chuyển mục “Configuration” thành “Release”, hiệu chỉnh tương tự như ở chế độ
biên dịch “Debug” tuy nhiên tên các tập tin sẽ không có chữ “d” cuối cùng.
II.2. Cài đặt phần mở rộng Nếu ta muốn can thiệp vào mã nguồn của OpenCV hoặc sử dụng phần mở rộng của thư viện
này, ta cần tự biên dịch trên máy tính để có được các tập tin nhị phân. Phần mở rộng không
được tích hợp sẵn mà là một phần rời khỏi thư viện mặc định. Chúng có thể được tải tại địa
chỉ https://github.com/opencv/opencv_contrib/releases dưới dạng tập tin nén. Phần mở rộng
chỉ có các phiên bản 3.0.0 và 3.1.0 vì thế để sử dụng phần mở rộng thì phần mặc định phải có
phiên bản tương ứng. Bên cạnh đó ta cũng cần phải có mã nguồn của phần mặc định dưới
dạng tập tin nén. Tải mã nguồn chưa biên dịch của phần mặc định tại đường dẫn
https://github.com/opencv/opencv/releases.
Để biên dịch mã nguồn của OpenCV trên máy tính có mã nguồn chưa biên dịch của phần
mặc định cài đặt trình biên dịch C/C++ (chẳng hạn Visual Studio) cộng thêm ứng dụng
CMake (dành cho Windows). Tải CMake tại đường dẫn http://www.cmake.org/download.
Lưu ý rằng một số chương trình diệt virus sẽ hạn chế việc biên dịch chương trình trên máy
tính do đó ta cần tắt chúng đi.
Ta sẽ sử dụng phiên bản OpenCV 3.0 và Visual Studio 2013 64bit để minh họa cho quá trình
cài đặt. Sau khi tải về và giải nén toàn bộ mã nguồn của phần mở rộng sẽ được chứa trong thư
mục “opencv_contrib-3.0”. Lúc này, ta cũng cần tải phần mặc định và giải nén thành thư mục
“opencv-3.0”. Các bước thực hiện tự biên dịch mã nguồn như sau:
- Bước 1: Tạo “project” trên Visual Studio với CMake
Mở ứng dụng CMake. Trong mục “Where is the source code” ta nhập vào đường
dẫn thư mục $DIRECTORY\opencv-3.0. Trong mục “Where to build the
binaries” ta nhập vào đường dẫn thư mục $DIRECTORY\opencv-3.0\build.
(Hình 9)
13
Hình 9 Cửa sổ CMake
Nhấp vào nút “Configure” và chọn phiên bản Visual Studio thích hợp (Hình 10) rồi
chọn “Next”.
Hình 10 Hộp thoại chọn phiên bản Visual Studio
Tiếp tục chọn trình biên dịch C/C++ thích hợp bằng cách tìm đến đường dẫn của
Visual Studio trên máy (Kí hiệu là $VISUALSTUDIO) và chọn tập tin “cl.exe”
(Hình 11).
$VISUALSTUDIO\VC\bin\cl.exe
Hình 11 Hộp thoại chọn trình biên dịch
14
Chọn “Finish” và chờ CMake thực hiện liên kết các tập tin mã nguồn để xây dựng
“project”.
- Bước 2: Biên dịch mã nguồn của “project” OpenCV
Sau khi thực hiện tạo “project” ta sẽ nhận được thông báo hoàn thành (Hình 12).
Hình 12 Kết quả tạo "project" trên CMake
Chỉ định đường dẫn đến thư mục chứa phần mở rộng của OpenCV (Hình 13) như
sau
$DIRECTORY\opencv_contrib-3.0\modules
Hình 13 Hộp thoại cài đặt đường dẫn phần mở rộng
Ta có thể bỏ chọn một số phần không cần thiết để biên dịch chương trình nhanh hơn
chẳng hạn mục “BUILD_DOC”. Ấn “Configure” lần nữa sau khi chọn xong.
Ấn “Generate”
- Bước 3: Cài đặt biến môi trường của Windows và cài đặt Visual Studio như cài đặt
phần mặc định.
15
Phần III. Cài đặt trên Linux với ngôn ngữ C/C++ Thư viện OpenCV phần cơ ản và cả phần mở rộng phiên bản trên Linux đều là thư mục nén
chứa mã nguồn mà không phải tập tin nhị phân đã được biên dịch sẵn do đó ta cần phải tự
biên dịch trên máy tính. Ta cũng cần CMake và một số công cụ khác trên Linux, cụ thể là
- GCC 4.4.x hoặc mới hơn
- CMake 2.8.7 hoặc mới hơn
- Git (trong trường hợp muốn lấy mã nguồn trực tiếp từ GitHub)
- GTK+2.x hay mới hơn, bao gồm các header (libgtk2.0-dev)
- pkg-config
Python 2.6 hay mới hơn và Numpy 1.5 hay mới hơn với các gói (python-dev, python-
numpy)
- Các gói ffmpeg hoặc libav : libavcodec-dev, libavformat-dev, libswscale-dev
- [tùy chọn] libtbb2 libtbb-dev
- [tùy chọn] libdc1394 2.x
- [tùy chọn] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-de
Ta có thể sử dụng các câu lệnh sau trên Terminal để cài đặt các công cụ cần thiết
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-de
Các bước biên dịch thư viện OpenCV như sau
- Bước 0: Tải mã nguồn của OpenCV trên trang chủ và giải nén (có thể tải thêm phần mở rộng). Hoặc ta có thể sử dụng Git để “clone” mã nguồn bằng các câu lệnh
cd ~/$DIRECTORY
git clone https://github.com/Itseez/opencv.git
git clone https://github.com/Itseez/opencv_contrib.git
Trong đó $DIRECTORY là đường dẫn lưu trữ thư mục opencv (phần mặc định) và opencv_contrib (phần mở rộng).
- Bước 1: Dùng CMake liên kết các tập tin mã nguồn. Ta có thể sử dụng CMake GUI như ở Windows hoặc thao tác dòng lệnh Tạo thư mục “build” trong thư mục của OpenCV sau khi giải nén hoặc lấy từ Git
cd ~/$DIRECTORY/opencv
mkdir build
cd build
Hiệu chỉnh CMake
16
cmake -D CMAKE_BUILD_TYPE=Release –D CMAKE_INSTALL_PREFIX=/usr/local ..
Nếu muốn biên dịch thêm phần mở rộng ta sử dụng câu lệnh
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local –D OPENCV_EXTRA_MODULES_PATH=/$DIRECTORY/opencv_contrib/modules/ ..
- Bước 2: Thực hiện biên dịch nguồn bằng câu lệnh
make -j7
- Bước 3: Cài đặt OpenCV bằng câu lệnh
sudo make install
17
PHỤ LỤC Để kiểm tra mọi thao tác cài đặt đã đúng ta có thể viết và biên dịch chương trình đầu tiên sử
dụng OpenCV và Visual Studio bằng cách tạo một tập tin *.cpp trong “project” và dán đoạn
mã nguồn sau đây (Bảng 1) rồi biên dịch chương trình lần lượt dưới dạng “Debug” và
“Release”. Với chương trình C/C++ trên Linux cần phải viết thêm các câu lệnh trong tập tin
“CMakeList.txt” hoặc cài đặt biến môi trường $LD_LIBRARY_PATH để trình biên dịch tìm
đến đúng các tập tin thư viện. Bảng 1 Mã nguồn chương trình sử dụng thư viện OpenCV
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace cv; using namespace std; int main( int argc, char** argv ) { cout << "Enter image directory: "; char* imageDirectory = new char[1000]; cin >> imageDirectory; Mat image; image = imread(imageDirectory, IMREAD_COLOR); // Read the file if(! image.data ) // Check for invalid input { cout << "Could not open or find the image" << std::endl ; return -1; } // Create a window for display. namedWindow( "Display window", WINDOW_AUTOSIZE ); imshow( "Display window", image ); // Show our image inside it. waitKey(0); // Wait for a keystroke in the window return 0; }
18
THAM KHẢO
[1] doxygen. (2015, December) OpenCV 3.1 Introduction to OpenCV. [Online].
http://docs.opencv.org/3.1.0/df/d65/tutorial_table_of_content_introduction.html