OpenCV có tên đầy đủ là Open Source Computer Vision, là một thư viện về thị giác máy với sức chứa hơn 500 hàm và hơn 2500 thuật toán về xử lý ảnh và đương nhiên sẽ có các vấn đề liên quan đến thị giác của máy. Cùng chúng tôi tìm hiểu kĩ hơn về OpenCv và các hàm xử lý ảnh trong OpenCv qua bài viết này nhé.
OpenCV là gì?
Open Cv được thiết kế rất tối ưu giúp sử dụng được tối đa sức mạnh của các chip đa lõi… thực hiện các phép tính toán nhanh và tốc độ đáp ứng của nó phải đủ nhanh so với các ứng dụng thông thường. OpenCV là một thư viện chạy trên nhiều nền tảng khác nhau như Window, Mac,IOS, Linux,… Việc sử dụng thư viện OpenCV phải tuân theo đầy đủ các quy định về việc sử dụng phần mềm với mã nguồn mở BSD, từ đó bạn sẽ có thể sử dụng thư viện này miễn phí dành cho cả mục đích thương mại với phi thương mại.
OpenCV được khởi động vào năm 1999 và đến những năm 2000 thì OpenCV được giới thiệu đến hội nghị IEEE về những vấn đề liên quan đến thị giác máy và nhận dạng chúng. Tuy nhiên thì đến những năm 2006 mới phát hành phiên bản OpenCV 1.0 và năm 2008 bản 1.1 mới ra đời. Vào tháng 10 năm 2009, phiên bản OpenCV thứ hai đã rơi đời và được gọi là phiên bản 2.x, phiên bản này sẽ có giao diện C++ (phiên bản đầu tiên chỉ có giao diện C) và nó có nhiều điểm khác biệt khác so với phiên bản lần thứ nhất.
Thư viện OpenCV sẽ được hỗ trợ từ Intel, sau đó thì OpenCv được hỗ trợ bởi Willow Garage – phòng thí nghiệm robot công nghệ mới. Cho đến bây giờ thì OpenCV vẫn là một thư viện mở và đang được phát triển bởi nguồn quỹ phi lợi nhuận và đã nhận được sử hưởng ứng nồng nhiệt đến từ cộng đồng.
Build thư viện OpenCV bằng Cmake
Trường “Where is the code”,bạn hãy chọn địa chỉ source code trong thư mục của OpenCV vừa cài đặt chính là E:/opencv/sources và trường “Where to build the binaries” tại một thư mục dùng để sử dụng ở build. Ở đây chúng tôi chọn E:/opencv/build/x86. Bạn đã chọn xong thì nhấn nút Configure.
Các bạn hãy chọn generator bằng MinGW Makefiles
Chọn nút Generate
Bạn đã chọn Cmake xong thì các bạn hãy chạy lệnh mingw32-make từ MinGW.
Cách hiển thị ảnh và load ảnh với chương trình OpenCV C++
Nhắc đến các hàm xử lý ảnh trong OpenCV thì chúng tôi sẽ hướng dẫn bạn cách hiển thị và load ảnh với Open C++.
Trong thư viện OpenCV C++ thì tất cả các dữ liệu ảnh và ma trận đều sẽ được lưu dưới dạng cv::Mat. Nguyên mẫu của hàm chính là cv::Mat imread(const std::string &filename, int flags) trong đó filename chính là đường link tới file ảnh và nếu file ảnh không nằm trong thư mục thì ta phải chỉ ra đường dẫn dưới dạng D:Anhabc.jpg. Flags là tham số ảnh để ta load vào.
Để hiển thị một ảnh lên màn hình thì trước hết ta phải tạo một cửa sổ. Tạo cửa sổ phải có tiêu đề cửa sổ là một chuỗi dài sting winname. Trong đó tham số Flags sẽ chỉ cho bạn kiểu cửa sổ muốn tạo còn tham số CV_ WINDOW_AUTOSIZE đã được sử dụng thì kích cỡ cửa sổ sẽ được tạo ra một cách tự động tùy theo kích thước ảnh. Ví dụ như hàm có tên namedWindow(const std::string &winname, int flags).
Chúng ta sẽ có hàm imshow(const std::string winname, cv::InputArray Mat) sẽ
Hàm imshow(const std::string winname, cv::InputArray Mat) sẽ hiển thị ảnh ra cửa sổ đã được tạo trước đó.
Hàm waitKey(int delay) sẽ đợi cho đến khi bạn nhấn một phím trong khoảng thời gian delay. Chúng ta sẽ thường dùng hàm này với mục đích là muốn dừng lại màn hình trong khoảng thời gian tham số delay. Nếu như bạn muốn dừng màn hình mãi thì ta nên đặt tham số delay bằng 0
Điều chỉnh độ tương phản và độ sáng
Ta sử dụng các hàm xử lý ảnh trong OpenCV để điều chỉnh độ tương phản và độ sáng của ảnh. Một điểm ảnh mà được lưu trữ trên máy tính được gọi là một ma trận của các điểm ảnh. Trong thư viện OpenCV thì điểm ảnh được biểu diễn dưới dạng cv::Mat. Đầu tiên chúng tôi sẽ xét một kiểu ảnh thông thường nhất đó chính là RGB. Ảnh thì mỗi pixel ảnh quan sát được chính là sự kết hợp của các màu Red (R), Green (G), Blue (B). Với sự kết hợp này thì chúng ta sẽ cho ra vô số các màu sắc khác nhau tùy theo tỉ lệ R,G,B. Chúng ta sẽ giả sử ảnh mã hóa bằng 8 bit , khi đó thì mỗi giá trị R,G,B sẽ được nằm trong khoảng [0, 255]. Như vậy, chúng ta có thể biểu diễn tới 255*255*255 ~ 1,6 triệu màu từ ba màu chính trên.
Qua ảnh trên, mỗi ảnh sẽ có m cột và n hàng, m được gọi là chiều dài của ảnh còn n là chiều cao của ảnh. Với mỗi pixel ở vị trí bất kì (i, j) sẽ tương đương với ba kênh màu kết hợp. Chúng ta muốn truy xuất từng pixel thì chúng ta nên sử dụng mẫu img.at<cv::Vec3b>(i, j)[k]
Chúng ta sẽ áp dụng kiến thức trên để tăng hoặc giảm độ sáng hay tương phản của ảnh màu.
Giả sử f là hàm biểu diễn cho một ảnh, f(x,y) là một giá trị của pixel trong ảnh và vị trí là (x,y). Chúng ta hãy đặt g(x,y) = αf(x,y) + β, khi đó thì chúng ta nói ảnh g(x,y) là ảnh có độ tương phản thấp hơn mấy lần so với ảnh f(x,y). Dựa vào công thức trên thì ta có chương trình thay đổi độ sáng hay tương phản
Hàm clone() dùng với mục đích sao chép ảnh giống hệt ảnh gốc cho vào ảnh đích (drt = src.clone()). Giá trị của f(x,y) hay g(x,y) đều phải nằm trong khoảng [0,255], phép biến đổi là g(x,y) = αf(x,y) + β có thể khiến giá trị của g(x,y) vượt qua ngưỡng đó. Sau đây là kết quả của α = 2.0 và β = 30.
Như vậy, chúng tôi đã giới thiệu qua cho bạn các hàm xử lý ảnh trong OpenCV. Nếu có gì thắc mắc thì hãy liên hệ với chúng tôi để được giải đáp. Chúc các bạn thành công!