12

Tôi đang sử dụng OpenCV2.2 để triển khai phát hiện đối tượng chuyển động với phương pháp Trích xuất nền. Và tôi sử dụng phương pháp Mô hình hỗn hợp Gaussian (GMM) để mô hình hóa hình ảnh tham chiếu nền.Làm thế nào để sử dụng cv :: BackgroundSubtractorMOG trong OpenCV?

Tôi trực tiếp nhận các pixel nền trước (hoặc mặt nạ tiền cảnh) bằng cách sử dụng lớp cv :: BackgroundSubtractorMOG được cung cấp trong OpenCV2.2. Đó là thuận tiện nhưng mặt nạ tiền cảnh quay trở lại bởi cv :: BackgroundSubtractorMOG không tốt như tôi mong đợi. Ngoài ra, có vẻ như cv :: BackgroundSubtractorMOG hoạt động kém hơn so với phương thức GMM viết bằng ngôn ngữ C được cung cấp trong OpenCV1.0.

Sau đây là mã của tôi trong OpenCV2.2:

cv::BackgroundSubtractorMOG mog; 
mog(frame, fgMask, 0.01); 

Vậy, tôi sử dụng phương pháp này một cách sai?

Nhân tiện, cv :: BackgroundSubtractorMOG có thực hiện xóa bóng trên pixel nền trước không?

Cảm ơn bạn rất nhiều.

+0

Dưới đây là tổng quan hữu ích, từ 3.0 tài liệu, sử dụng chức năng Trích xuất nền của OpenCV: http://docs.opencv.org/master/db/d5c/tutorial_py_bg_subtraction.html – Pierz

Trả lời

12

Khi bạn tạo mog, bạn không xác định bất kỳ tham số nào, vì vậy nó được tạo với các tham số mặc định. Here bạn có mô tả về từng thông số, có thể chỉ là vậy. Hãy thử với 3, 4 5 Gaussians.

Chức năng này không hoàn thiện loại bỏ bóng nhưng bạn có this chức năng khác thực hiện. Chúc may mắn!

1

câu trả lời F.X. về this thread cho thông số mẫu

backgroundSubtractor = new BackgroundSubtractorMOG(3, 4, 0.8); 
+0

nhưng hoạt động rất chậm trên ứng dụng của tôi. Tôi đang tìm kiếm một số thông số tốt cho bản thân mình – austin

5

Có những thuật toán gần đây mà loại bỏ hình nền (phát hiện foreground) tốt hơn nhiều so với thực hiện GMM tiêu chuẩn trong OpenCV.

Ví dụ: có cách tiếp cận xếp tầng bộ phân loại theo khối được mô tả trong this journal article, cùng với C++ dựa trên source code.

+0

Cấu trúc thư mục đầu vào trông như thế nào khi sử dụng công cụ này? Nó dường như segfault trên readdir() không có vấn đề gì tôi ném vào nó. – RussellStewart

0

Tôi sẽ khuyên bạn nên sử dụng các cài đặt sau để bắt đầu. Sau đó, bạn có thể bắt đầu điều chỉnh các thông số của bạn:

cv::BackgroundSubtractorMOG2 mog; 
mog(rawFrame,foregroundFrame,-1); 
mog.set("nmixtures", 3); 
mog.set("detectShadows",1); 

Trong ví dụ này tôi đặt subtractor MOG2 với 3 hỗn hợp Gaussian. Tôi cũng cho phép phát hiện bóng.

Các vấn đề liên quan