Mục đích của bài này là không chỉ để giúp bạn biết cách sử dụng OpenCV trên Qt Creator mà bất cứ thư viện nào khác. Để ví dụ thì mình dùng thư viện OpenCV để viết một chương trình xem phim đơn giản. Cách tích hợp các thư viện khác các bạn làm tương tự.
OpenCV
OpenCV (Open Source Computer Vision Library) được phát triển vào năm 1999, là bộ thư viện phần mềm máy học (Machine Learning) và thị giác máy tính (Computer Vision) mã nguồn mở. OpenCV được xây dựng để cung cấp một bộ công cụ mạnh mẽ và dễ dàng sử dụng cho các ứng dụng có liên quan tới lĩnh vực thị giác máy tính và máy học.
Cấu trúc thư viện
Bộ thư viện OpenCV trên trang chủ được build từ trình biên dịch msvc của Visual Studio, nên nếu Qt Creator của bạn cũng dùng trình biên dịch msvc thì bạn may mắn rồi, nhưng nếu Qt Creator của bạn dùng trình biên dịch MinGW thì bạn phải mở bài Hướng dẫn build thư viện OpenCV trên Windows ra đọc và làm theo trước đã để OpenCV và Qt có thể tương tác với nhau. Trong trường hợp của mình thì mình dùng trình biên dịch MinGW, các trình biên dịch khác bạn làm tương tự.
Sau khi đã build thư viện bằng MinGW, thư viện của bạn sẽ nằm trong thư mục install, trong máy mình thư mục này nằm ở C:/opencv/build-new/install, bên trong thư mục này có 2 thư mục bạn sẽ sử dụng là include và x86/mingw/bin (đối với msvc là C:/opencv/build/include và C:/opencv/build/x86(x64)/vc<x> tùy thuộc phiên bản msvc của bạn). Thư mục include chứa các file header, còn thư mục bin chứa các file thư viện liên kết động.
Ví dụ
Chúng ta sẽ viết một chương trình xem phim đơn giản (nói là xem phim cho to lớn chứ thực ra chỉ là mở một file video lên thôi :)). Bây giờ bạn mở Qt Creator lên và tạo một project để tích hợp thư viện vào, project loại gì cũng được, console hay widget đều được, không quan trọng.
Tiếp theo bạn mở file *.pro ra và thêm các dòng sau đây vào.
INCLUDEPATH += C:\opencv\build-new\install\include LIBS += C:\opencv\build-new\install\x86\mingw\bin\libopencv_core300.dll LIBS += C:\opencv\build-new\install\x86\mingw\bin\libopencv_highgui300.dll LIBS += C:\opencv\build-new\install\x86\mingw\bin\libopencv_imgproc300.dll LIBS += C:\opencv\build-new\install\x86\mingw\bin\libopencv_videoio300.dll
Từ khóa INCLUDEPATH
để chỉ cho Qt Creator biết nơi cần tìm các file header. Từ khóa LIBS
chỉ định các file binary sẽ dùng trong quá trình link. Sau đó bạn nhớ save file *.pro này lại để qt creator cập nhật mới dùng được.
#include <QCoreApplication> #include <opencv2/highgui/highgui.hpp> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); cv::VideoCapture cap("SampleVideo.mp4"); cv::Mat mat; while(1) { if(cap.read(mat)) cv::imshow("OpenCV Example", mat); cv::waitKey(30); } return a.exec(); }
Trên đây là đoạn code để mở một file video. Sau đó bạn bấm Ctrl+B hoặc bấm vào hình cây búa để chương trình dịch đoạn code của bạn (chỉ dịch thôi chứ chưa chạy). Sau khi dịch xong, bạn sẽ được một thư mục có dạng ../build-<xxxxx>-Desktop_Qt_5_5_0_MinGW_32bit-Debug. Thư mục này nằm cùng vị trí với thư mục project của bạn.
Tiếp theo các bạn phải copy các file *.dll mà chúng ta đã chỉ ra trong file *.pro từ thư mục x86/mingw/bin vào thư mục ../build-<xxxxx>-Desktop_Qt_5_5_0_MinGW_32bit-Debug/debug. Vậy là xong, bây giờ bạn có thể bấm Ctrl+R hoặc bấm vào hình tam giác màu xanh để chương trình chạy.
Vậy là bạn đã biết cách tích hợp thư viện ngoài vào Qt Creator rồi!