Crop hình ảnh bằng vùng ROI hình đa giác

Xử lý ảnh trong 1 vùng đa giác nhất định giúp cho bạn hạn chế detect nhầm và tăng tốc độ xử lý. Bài viết này hướng dẫn bạn cách crop (hoặc extract) vùng ROI hình đa giác (polygon).

Bài viết này giả sử rằng vùng ROI là tứ giác lồi, có sự hợp tác của người dùng để cho ra tứ giác bình thường. Tứ giác bình thường là tứ giác lồi, các điểm được sắp xếp tuần tự.

Lý thuyết

Giả sử bạn muốn crop vùng ROI là vùng xe đi vào

Để crop được hình ảnh bạn cần làm 3 bước sau:

Bước 1: crop ảnh theo diện tích hình chữ nhật nhỏ nhất (bouding rect) chứa đa giác.

Bước 2: tạo mask (ảnh binary) và fill màu trắng (255) từ ảnh đã crop.

Bước 3: dùng hàm bitwise_and() để lấy những pixel từ ảnh đã crop nếu trong ảnh mask pixel đó có màu trắng. Vậy là ta được kết quả như hình dưới.

Nếu bạn muốn crop vùng ROI có nền màu trắng thì bạn dùng bitwise_not() để nghịch đảo màu của mask. Sau đó ghép vào ảnh trên là được.

Source code

Bài viết này cung cấp source code cả 3 ngôn ngữ cho bạn

1. Python

2. C++

Cách gọi hàm:

3. C#

Cách gọi hàm