2010-01-08 39 views
7

Tôi muốn thực hiện phép trừ nền trong tệp video bằng phương pháp OpenCV. Ngay bây giờ tôi có thể làm phép trừ nền, nhưng vấn đề là tôi không thể có được đầu ra ở chế độ màu. Tất cả các đầu ra sau khi đã trừ nền đang đến ở chế độ màu xám :(. Tôi muốn để có được những thông tin màu cho foreground đó là kết quả đầu ra sau khi nền bị trừ.Trừ phông nền hiệu quả với OpenCV

Tôi có thể làm điều đó bằng mặt nạ kỹ thuật? ? như thủ tục sau đây mà tôi đang suy nghĩ về

  1. Capture Input -. InputFrame (RGB)
  2. Process InputFrame
  3. Subtract nền, cửa hàng foreground trong TempFrame (được sắp tới trong màu xám quy mô :()
  4. Tạo một mặt nạ sử dụng TempFrame
  5. Áp dụng mặt nạ tạo ra để các InputFrame
  6. Nhận foreground màu như OutFrame

tôi đánh lên với làm mặt nạ sử dụng OpenCV. Tôi chỉ là một người mới bắt đầu trong OpenCV. Xin hãy giúp tôi vượt qua điều này.

Xin cảm ơn trước.

Trả lời

10

OK, tôi không hiểu cách TempFrame (tiền cảnh của bạn) có thể là thang độ xám nếu bạn đang sử dụng phép trừ nền. Bạn phải sử dụng một thuật toán rất đặc biệt. Nhưng giả sử TempFrame là greyscale, thì bạn sẽ làm điều này:

cv::Mat mask = tempFrame > 0.5; 

cv::Mat outFrame; 
capturedFrame.copyTo(outFrame, mask); 

Đó là mã OpenCV 2.0 ở trên. Số 0,5 là một ngưỡng, bạn sẽ cần phải đặt nó vào một cái gì đó thích hợp. Nếu bạn không sử dụng hình ảnh dấu chấm động, bạn có thể đặt nó thành 128 hoặc một cái gì đó tương tự. Đây là điều tương tự trong OpenCV 1.1 mã:

CvMat* mask = cvCreateMat(tempFrame.rows, tempFrame.cols, CV_8UC1); 
cvCmpS(tempFrame, 0.5, mask); 

CvMat* outFrame = cvCreateMat(capturedFrame.rows, capturedFrames.cols, CV_32FC3); 
cvCopy(capturedFrame, outFrame, mask); 
+0

Cảm ơn bạn, Nhưng tôi vẫn tự hỏi tại sao tất cả các ví dụ và mã cho BGS tôi đi qua internet chỉ tạo ra đầu ra Grayscale? Anyways .. Cảm ơn một lần nữa. – Jabez

+0

Oh okay, tôi cho rằng nó dễ dàng hơn để thực hiện phép trừ nền với độ xám, vì vậy có lẽ đó là lý do tại sao. –

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