Biên dịch thư viện OpenCV
Điểm thuận lợi của việc tự cài đặt và biên dịch thư viện có thể kể đến như sau:
- Hỗ trợ IDE mới nhất, như trong bản OpenCV 3.0 (22/11/2015) thì chưa có bản biên dịch sẵn dành cho VS 2015.
- Customize được các thư viện khác liên quan như Kinect, OpenCL, Python…
Link Download thư viện OpenCV cho HĐH Windows
Bước 1: Giải nén thư viện vào thư mục được định sẵn. Giả sử đường dẫn của mã nguồn là C:\opencv
Bước 2: Tải và cài đặt CMake. Thư mục build
chứa những tập tin của phần mã nguồn được biên dịch sẵn. Phần sources
được sử dụng cho cài đặt manual.
Bước 3: Mở CMake. Trong phần Where is the source code
sẽ trỏ đến thư mục sources
đã đề cập lúc trước. Phần Where to build the binaries
là nơi chứa phần thư viện được biên dịch. Trong ví dụ này đường dẫn là C:\opencv\sources\build
.
Bước tiếp theo nhấn Configure, sau đó chọn bộ generator cho project, trong phần này sẽ chọn tương ứng với IDE/Compiler mà mã nguồn mình sử dụng. Đồng thời, nếu máy tính đang ở kiến trúc x86 thì chọn các phiên bản IDE với tùy chọn là x86 (Ví dụ Visual Studio 14 2015). Đối với các máy tính kiến trúc x64 thì chọn phiên bản có hậu tố là Win64. Nhấn Finish để kết thúc cấu hình.
Sau khi configure xong thì danh sách các tùy chọn khi biên dịch để hiện ra với rất nhiều tùy biến đi kèm. Phần này trong tutorial này sẽ bỏ qua vì mục tiêu chỉ cần cài đặt bộ thư viện ở mức mặc định là thành công rồi. Nếu không có gì thay đổi ta nhấn chọn Generate.
Sau khi quá trình phát sinh mã nguồn hoàn tất, trong thư mục build sẽ xuất hiện các Project/Solution khác nhau.
Bước 4: Dùng Visual Studio để mở solution có tên là OPENCV. Lưu ý: khi bản VS này phải trùng với bản VS đã configure trong cmake.
Quá trình biên dịch cần thực hiện qua 2 bước: (1) biên dịch thư viện cho quá trình Debug và (2) biên dịch chương trình trong quá trình Release. Để thực hiện các bước này đơn giản chỉ cần click chọn Target sẽ build rồi sau đó nhấn F7 và ngồi đợi (Mất khoàng 10-15 phút cho quá trình biên dịch trên Debug/Release). Kết quả trong quá trình biên dịch sẽ có khoảng 50 projects biên dịch thành công, 17 cái bị skip và 2 cái bị fail. Sau khi biên dịch, ta sẽ có 2 thư mục cần quan tâm nằm trong build. Đó là thư mục lib chứa toàn bộ dữ liệu cần thiết cho quá trình lập trình; thư mục là dữ liệu cần thiết để chương trình sau khi build có thể chạy được.
Cấu hình Opencv trên Visual Studio
Bước 1: Tạo một Project (Empty Project).
Trước khi thực hiện tiếp các công việc cấu hình cho project. Ta cần xác định rõ sẽ cần cấu hình những thông tin gì:
- Nơi chứa header file của OpenCV. Dĩ nhiên ta cần làm điều này để include các đối tượng, hàm… của OpenCV.
- Cấu hình các file cần thiết khi lập trình.
- Cấu hình các file cần thiết cho quá trình thực thi. Bởi trong Visual Studio có 2 target khi run bao gồm Debug và Release, nên ta cần phải cấu hình riêng biệt cho mỗi target đó.
Cấu hình header file
Click chuột phải vào tên project (InstallOpencv) chọn Properties (Hoặc nhấn Alt + F7).
Phía bên phần Sidebar chọn C/C++, General, mục Additional Include Directories ta trỏ đến thư mục opencv\build\include
(không phải ). Để đảm bảo ta có thể check bằng cách kiểm tra xem thư mục include đó có các header file không. Xong nhấn OK.sources\build\include
Cấu hình thư viện cho quá trình lập trình
Nhấn Alt + F7 để vào phần Properties của Project. Chọn Thẻ Linker, mục Additional Library Directories
ta trỏ đến thư mục lib\Debug
(trong ví dụ này là: C:\opencv\sources\build\lib\Debug
). Vì đang cấu hình cho target là Debug nên phần Configuration phải là Debug
Chuyển đến thẻ Input, mục Additional Dependencies ta nhập các file sau:
opencv_calib3d300d.lib
opencv_core300d.lib
opencv_features2d300d.lib
opencv_flann300d.lib
opencv_hal300d.lib
opencv_highgui300d.lib
opencv_imgcodecs300d.lib
opencv_imgproc300d.lib
opencv_ml300d.lib
opencv_objdetect300d.lib
opencv_photo300d.lib
opencv_shape300d.lib
opencv_stitching300d.lib
opencv_superres300d.lib
opencv_ts300d.lib
opencv_video300d.lib
opencv_videoio300d.lib
opencv_videostab300d.lib
Sau khi cấu hình xong, ta chuyển qua target là Release và thực hiện giống hệt như vậy. Tuy nhiên đường dẫn lần này sẽ là C:\opoencv\sources\build\lib\Release
.
Phần Additional Dependencies sẽ là:
opencv_calib3d300.lib
opencv_core300.lib
opencv_features2d300.lib
opencv_flann300.lib
opencv_hal300.lib
opencv_highgui300.lib
opencv_imgcodecs300.lib
opencv_imgproc300.lib
opencv_ml300.lib
opencv_objdetect300.lib
opencv_photo300.lib
opencv_shape300.lib
opencv_stitching300.lib
opencv_superres300.lib
opencv_ts300.lib
opencv_video300.lib
opencv_videoio300.lib
opencv_videostab300.lib
Cấu hình thư viện cho quá trình thực thi
Khi thực hiện build 1 chương trình, VS sẽ tạo ra trong thư mục của Solution hai thư mục với cấu trúc như sau: \Debug
và \Release
. Trong ví dụ này là x64\Debug, x64\Release. Ta chép toàn bộ file trong build\bin\Debug vào x64\Debug, tương tự như vậy đối với build\bin\Release và x64\Release.
Tạo một file cpp và run thử chương trình.
Mã nguồn:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat img = imread("demo.jpg");
imshow("show image", img);
waitKey(0);
destroyAllWindows();
}
(Với mã nguồn này lưu ý đặt 1 file tên là demo.jpg
vào trong thư mục chứa mã nguồn).
Kết quả ta được như hình trên.
Tuy nhiên
Có một chữ tuy nhiên to đùng như vậy vì với cách cấu hình thế này có khá là nhiều bất cập:
- Mỗi lần tạo 1 project OpenCV mới mà ngồi config (Mục 2) thì cũng rất là mất thời gian. Chưa kể trong lúc cấu hình mà quên mất một công đoạn nào thì có khi đi tong cả buổi chỉ để fix lỗi.
- Những file trong sources\bin\Debug hay Release đều xấp xỉ 900MB. Vị chi mỗi lần chép qua bên project thì tốn thêm 1.8GB bộ nhớ. Chỉ cần trong máy chứa dăm ba project dùng OpenCV thì sẽ ngốn dung lượng đến chừng nào.
- Phần Additional Dependencies mỗi phiên bản OpenCV mỗi khác, làm thế nào để lấy được danh sách các file như thế này.
Ta sẽ giải quyết từ dễ đến khó trước.
Additional Dependencies
Sau khi biên dịch xong thư viện ta mở Command Line và trỏ đến thư mục sources\build\lib
Gõ lệnh sau
dir Debug\*d.lib /B >..\DependenciesDebug.txt
dir Release\*.lib /B >..\DependenciesRelease.txt
Sau khi gõ xong thì trong thư mục build sẽ xuất hiện 2 file text là DependenciesDebug và DependenciesRelease chứa danh sách tât cả các file libs. Mỗi lần sử dụng chỉ cần mở file lên và chép vào.
Lib Configuration
Mở Command Line (Với quyền Admin - click chuột phải vào biểu tượng Start và chọn Command Promp) và gõ lệnh
setx -m OPENCV_DIR C:\opencv
Nhấn Windows E
để mở File Explorer
Click vào Computer và chọn Properties
Chọn Advanced system settings. Trong thẻ Advanced chọn Environment Variables…
Điền ngay phía sau của phần Variable value giá trị sau: %OPENCV_DIR%\sources\build\bin\Debug;%OPENCV_DIR%\sources\build\bin\Release
Xong, và từ giờ trở đi ta không cần phải chép các file trong build\bin vào trong project nữa.
Sao lưu config của project
Trong sidebar Property Manager ta thấy danh sách các config tương ứng với từng target architecture trong project.
Ta sẽ tạo một Property Sheet mới (Click chuột phải vào từng mục và chọn Add New Project Property Sheet…), double click vào mục mới tạo và cấu hình giống hệt với mục 2. Sau đó lưu lại. VS sẽ tạo ra 1 file có định dạng props trong project. Sau này khi tạo ra 1 project mới ta chỉ cần import Property đã tạo mà không cần config lại từ đầu.
Vì đã set OPENCV_DIR là thư mục của OpenCV nên ta có thể thay đổi đường dẫn của các config thành
%OPENCV_DIR%\build\include
%OPENCV_DIR%\source\build\lib\Debug
%OPENCV_DIR%\source\build\lib\Release