C# OpenCV 강좌 : 제 43강 - 배경 삭제 (Mat)
배경 삭제(Background Remove, Background Subtractor)

BackgroundSubtractor 함수를 이용하여 영상에서의 배경을 지울 수 있습니다.
프레임들을 비교하여 움직이는 물체(object)만 표시합니다.
이미지에는 적용할 수 없으며 카메라 영상을 이용하여 프레임을 비교하여 배경을 삭제합니다.
원본(Source, src)은 영상을 사용합니다.
영상 사용하기: [3강 바로가기][3강]
메인 코드
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);
}
}
}세부 코드
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 연산을 통하여 frame과 remove 영상을 And 연산 후, remove에 다시 저장하여 출력합니다.
함수 적용
BackgroundSubtractor();실행될 구문에 함수를 적용합니다. Form 로드 이벤트 또는 Button Click 이벤트 등에 적용합니다.
출력 결과


공유하기
Kakao
Naver
Twitter
LinkedIn
Facebook
댓글 남기기