Hướng dẫn play camera IP trong OpenCV không bị delay

Khi play camera bằng OpenCV bạn sẽ thường gặp vấn đề delay của camera. Nếu thời gian xử lý mỗi frame càng nhiều thì delay càng nghiêm trọng.

Lý do là camera stream hình ảnh về có buffer, lấy tuần tự ra để hiển thị. Do đó phương pháp giải quyết là dùng 2 thread, 1 thread đọc frame mới nhất và 1 thread xử lý.

Bài này hướng dẫn play camera IP trong OpenCV không bị delay bằng cách viết 1 class thay thế cho VideoCapture. Sau khi thay thế thì cách dùng cũng gần giống như cũ, không khác biệt nhiều.

Khai báo class VideoCapture

Cách sử dụng

Giải thích

Trong class VideoCapture sẽ tạo 1 thread để chạy hàm _reader(). Hàm này có công dụng chạy liên tục để lấy frame mới nhất, độc lập với hàm while hiển thị hình ảnh.

Trong hàm while chính thì mỗi khi gọi hàm read() để lấy frame thì class VideoCapture sẽ trả về frame mới nhất, do đó sẽ giảm đi độ delay rất nhiều.