C# OpenCV 강좌 : 제 43강 - Background Remove (Mat)

C# OpenCV Background Subtractor

C# OpenCV 강좌 : 제 43강 - Background Remove (Mat)
[ C#-OpenCvSharp2 ] - 윤대희

배경 삭제(Background Remove, Background Subtractor)


0 BackgroundSubtractor 함수를 이용하여 영상에서의 배경을 지울 수 있습니다. 프레임들을 비교하여 움직이는 물체(object)만 표시합니다.

이미지에는 적용할 수 없으며 카메라 영상을 이용하여 프레임을 비교하여 배경을 삭제합니다.



Main Code


using OpenCvSharp;
using OpenCvSharp.CPlusPlus;


public void BackgroundSubtractor()
{
    using (VideoCapture video = new VideoCapture(0))
    using (BackgroundSubtractorGMG GMG = new BackgroundSubtractorGMG())
    using (BackgroundSubtractorMOG MOG = new BackgroundSubtractorMOG())
    using (BackgroundSubtractorMOG2 MOG2 = new BackgroundSubtractorMOG2())
    using (Mat frame = new Mat())
    using (Mat remove = new Mat())
    using (Window win_GMG = new Window("GMG"))
    using (Window win_MOG = new Window("MOG"))
    using (Window win_MOG2 = new Window("MOG2"))
    {
        video.FrameWidth = 640;
        video.FrameHeight = 480;

        while (Cv.WaitKey(1) < 0)
        {
            video.Read(frame);

            GMG.Run(frame, remove);
            win_GMG.ShowImage(remove);

            MOG.Run(frame, remove);
            win_MOG.ShowImage(remove);

            MOG2.Run(frame, remove);
            win_MOG2.ShowImage(remove);
        }
    }
}



Class Code


using OpenCvSharp;
using OpenCvSharp.CPlusPlus;

BackgroundSubtractor 함수를 사용하기 위해서는 네임스페이스using OpenCvSharp.CPlusPlus;를 선언해야 사용할 수 있습니다.


using (VideoCapture video = new VideoCapture(0))

Mat 형식의 영상을 생성합니다.


using (BackgroundSubtractorGMG GMG = new BackgroundSubtractorGMG())
using (BackgroundSubtractorMOG MOG = new BackgroundSubtractorMOG())
using (BackgroundSubtractorMOG2 MOG2 = new BackgroundSubtractorMOG2())

3가지의 함수를 이용하여 배경을 삭제할 수 있습니다.

BackgroundSubtractorGMG, BackgroundSubtractorMOG, BackgroundSubtractorMOG2 함수를 사용합니다.


using (Mat frame = new Mat())
using (Mat remove = new Mat())

video의 프레임을 저장할 frame 변수와 배경이 삭제된 후 출력할 remove를 생성합니다.


using (Window win_GMG = new Window("GMG"))
using (Window win_MOG = new Window("MOG"))
using (Window win_MOG2 = new Window("MOG2"))

Window창을 선언하여 결과를 표시할 윈도우 창을 생성합니다.


video.FrameWidth = 640;
video.FrameHeight = 480;

프레임의 너비높이를 설정합니다.


while (Cv.WaitKey(1) < 0)
{
    ...
}

키 입력이 있을 때 까지 반복합니다.


video.Read(frame);

frame비디오 장치에서 읽어온 영상을 저장합니다.


GMG.Run(frame, remove);
win_GMG.ShowImage(remove);

MOG.Run(frame, remove);
win_MOG.ShowImage(remove);

MOG2.Run(frame, remove);
win_MOG2.ShowImage(remove);

GMG, MOG, MOG2에 배경 삭제 함수를 적용합니다. *.Run(원본, 결과)입니다.

그 후, ShowImage(출력 이미지)를 사용하여 결과를 표시합니다.

  • Tip : Window 창을 사용하지 않고 Form에 띄울 경우 pictureBoxIpl1.ImageIpl = remove.ToIplImage();를 사용합니다.



색상 적용


GMG.Run(frame, remove);
Cv2.BitwiseAnd(frame, remove.CvtColor(ColorConversion.GrayToBgr), remove);
win_GMG.ShowImage(remove);

MOG.Run(frame, remove);
Cv2.BitwiseAnd(frame, remove.CvtColor(ColorConversion.GrayToBgr), remove);
win_MOG.ShowImage(remove);

MOG2.Run(frame, remove);
Cv2.BitwiseAnd(frame, remove.CvtColor(ColorConversion.GrayToBgr), remove);
win_MOG2.ShowImage(remove);

Bitwise 연산을 통하여 frameremove 영상을 And 연산 후, remove에 다시 저장하여 출력합니다.



함수 적용


BackgroundSubtractor();

실행될 구문에 함수를 적용합니다. Form 로드 이벤트 또는 Button Click 이벤트 등에 적용합니다.



Result


1 2



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post C# OpenCV 강좌 : 제 42강 - Bitwise (Mat) ⤧  Next post C# OpenCV 강좌 : 제 44강 - 거리 변환
    C#-OpenCvSharp2 Category