Gia Bao TSC

OpenCV là gì? Làm thế nào để sử dụng nó trong C++ projects

OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (Computer Vision), xử lý ảnh (Image Processing) và máy học (Machine Learning)

 OpenCV  posted at January 08, 2019

OpenCV là gì

OpenCV (Open Source Computer Vision Library) là một mã nguồn mở hàng đầu cho thị giác máy tính (Computer Vision) và phần mềm máy học (Machine Learning). OpenCV được xây dựng để cung cấp một cơ sở hạ tầng chung cho các ứng dụng thị giác máy tính và để đẩy nhanh việc sử dụng nhận thức của máy trong các sản phẩm thương mại. Là một sản phẩm được cấp phép BSD, OpenCV giúp các doanh nghiệp dễ dàng sử dụng và sửa đổi mã nguồn.

Thư viện có hơn 2500 thuật toán được tối ưu hóa, bao gồm một bộ toàn diện về cả thuật toán máy tính cổ điển và hiện đại và thuật toán học máy. Các thuật toán này có thể sử dụng để phát hiện và nhận diện khuôn mặt, nhận dạng đối tượng, phân loại hành động của con người trong video, theo dõi chuyển động của camera, theo dõi các vật thể chuyển động, trích xuất mô hình 3D của các vật thể, tạo ra các đám mây điểm 3D từ camera stereo, ghép các hình ảnh lại với nhau để tạo ra ảnh toàn cảnh có độ phân giải cao, tìm hình ảnh giống / tương tự từ cơ sở dữ liệu ảnh, loại bỏ mắt đỏ khỏi hình ảnh được chụp băng đèn flash, theo dõi chuyển động của mắt, nhận ra cảnh vật và thiết lập các điểm đánh dấu để phủ nó với các điểm tăng cường, v.v... OpenCV có hơn 47.000 người trong cộng đồng người dùng và ước tính số lượt tải xuống khoảng hơn 14 triệu. Thư viện được sử dụng rộng rãi trong các công ty, nhóm nghiên cứu và bởi các cơ quan chính phủ.

Cùng với các công tư được thành lập như Google, Yahoo, Microsoft, Intel, IBM, Sony, Honda, Toyota sử dụng thư viện, có rất nhiều công ty khởi nghiệp như Applied Minds, VideoSurf và Zeitera sử dụng OpenCV. OpenCV được triển khai sử dụng trải rộng phạm vi từ việc ghép các hình ảnh đường phố với nhau, phát hiện sự xâm nhập trong video giám sát ở Israel, giám sát thiết bị của tôi ở Trung Quốc, giúp robot điều hướng và nhặt đồ vật tại Willow Garage, phát hiện tai nạn đuối nước ở bể bơi tại Châu Âu, chạy nghệ thuật tương tác ở Tây Ban Nha và New York, kiểm tra nhãn trên các sản phẩm trong các nhà máy trên khắp thế giới để phát hiện khuôn mặt nhanh chóng ở Nhật Bản.

OpenCV có giao diện C++, Python, Java và MATLAB và hỗ trợ Windows, Linux, Android và Mac OS. OpenCV chủ yếu hướng tới các ứng dụng tầm nhìn thời gian thực và tận dụng các hướng dẫn MMX và SSE khi khả dụng. Các gaio diện hỗ trợ CUDA, OpenGL đầy đủ tính năng đang được phát triển ngay bây giờ. Có hơn 500 thuật toán và gấp hơn 10 lần số hàm tạo và hỗ trợ các chức năng đó. OpenCV được viết nguyên bản bằng C++ và có các giao diện mẫu làm việc trơn tru với STL container.

Các ứng dụng OpenCV

OpenCV đang được sử dụng rộng rãi trong các ứng dụng bao gồm:

  • Hình ảnh street view
  • Kiểm tra và giám sát tự động
  • Robot và xe hơi tự lái
  • Phân tích hình ảnh y tế
  • Tìm kiếm và phục hồi hỉnh ảnh/ video
  • Phim - cấu trúc 3D từ chuyển động
  • Nghệ thuật sắp đặt tương tác

Chức năng OpenCV

  • Image/ video I/O, xử lý, hiển thị (core, imgproc, highgui)
  • Phát hiện các vật thể (objdetect, features2d, nonfree)
  • Geometry-based monocular or stereo computer vision (calib3d, stitching, videostab)
  • Machine learning & clustering (ml, flann)
  • CUDA acceleration (gpu)

Cài đặt OpenCV

Download OpenCV tại địa chỉ:

https://opencv.org/releases.html

Tùy thuộc vào mục đích sử dụng để lựa chọn phiên bản phù hợp. Trong ví dụ dưới đây, tôi sử dụng OpenCV cho C++ projects. Do vậy, chúng ta sẽ download phiên bản 4.0.1 (Win pack) thuộc nhánh Doxygen HTML.

Sau khi download, cài đặt thành công, chúng ta có thư mục bên dưới:

Sử dụng OpenCV

Tạo project C++ (Windows Console Application).

Note: Phiên bản OpenCV download ở trên hỗ trợ Visual Studio 14 (2015) và Visual Studio 15 (2017)

Ở phần này, tôi không giới thiệu chi tiết về cách cấu hình Project với C++, phần này sẽ được giải thích ở bài viết tiếp theo. Sau đây là souce code ví dụ về chuyển đổi ảnh màu thành ảnh đen - trắng.


using namespace std;
using namespace cv;

int main() {
	
	// load color image
	Mat img = imread("opencv.png");
	
	// convert to gray image
	Mat gray_img;
	cvtColor(img, gray_img, COLOR_BGR2GRAY);
	imwrite("opencv_gray.png", gray_img);

	// create windows
	namedWindow("colorImg", WINDOW_AUTOSIZE);
	namedWindow("grayImg", WINDOW_AUTOSIZE);

	// show image
	imshow("colorImg", img);
	imshow("grayImg", gray_img);

	waitKey(0);
	return 0;
}

Kết quả chạy chương trình demo:

Tham khảo

Để biết thêm về OpenCV, bạn có thể tham khảo theo danh sách bên dưới:

Gia Bao TSC