Lọc màu ảnh (filter color) là tìm đối tượng dựa trên màu sắc của vật thể đó. Bài này có ý tưởng tương tự bài Theo dõi đối tượng theo màu Sử dụng C++ và OpenCV để thực hiện.
Giải thuật lọc màu ảnh này phù hợp nhất với đối tượng có màu sắc tương phản với background. Bên dưới là hình dùng để test
Thuật toán
Chương trình dùng hệ màu HSV để lọc màu. Sau khi chuyển từ hệ màu RGB sang HSV thì filter giá trị màu bằng hàm cv::inRange(), kết quả là ảnh binary gọi là mask.
Sau đó apply mask này vào ảnh gốc ta được ảnh chỉ chứa màu trong giới hạn cần tìm.
Thực hiện
Đầu tiên tạo 6 trackbar để giới hạn khoảng giá trị của 3 kênh màu HSV
Căn chỉnh trackbar sao cho mask thể hiện đúng vùng màu mong muốn. Tiếp theo là copy vùng màu theo mask vào ảnh mới. Kết quả như hình bên dưới
Video
Ứng dụng khác
Một ví dụ khác: tìm sâu trên lá
Tìm rầy nâu trên lá
Tìm trứng ốc sên
Tham khảo
Create mask on image (tạo mặt nạ cho ảnh)
Log
Version 0.0.3: Thêm mumeric control để set value tiện hơn
– Thêm tính năng đọc giá trị HSV từ clipboard, với khoảng cách bằng dấu ,
Thí dụ: 20,159,64,235,52,201
Version 0.0.3: Thêm mumeric control để set value tiện hơn
Version 0.0.2: Viết giao diện bằng C# để fix lỗi trackbar bị overlap
Download
Lưu ý source code có nhiều project, các bạn chỉ cần build FilterColor.sln là được.
Source code (Github)
FilterColor_0.0.4.zip (Google Drive – 13 MB)
Lưu ý phải cài .NET framework 4.5 và C++ redistribute 2015