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 이벤트
등에 적용합니다.
출력 결과
공유하기


댓글 남기기