플러드필은 영상에서 특정 영역을 고립시키거나 구분할 때 사용되는 기능이며, 영상 처리 및 영상 분석 등의 전처리 과정으로 널리 사용된다. 플러드필은 입력 영상으로부터 마스크를 만드는 용도로 사용될 수 있는데, 이러한 마스크는 추후 제한된 영역에서만 연산을 수행하도록 하여 전체 연산 속도를 향살시키는 용도로 사용될 수 있다.마스트는 Cv.FloodFill() 함수의 인자로도 사용될 수 있으며, 이 경우 채우기가 완료된 곳을 제어하는 용도로 사용된다.
OpenCV에서 제공하는 플러드필은 다른 페인팅 프로그램에서 채우기 기능의 일반적인 형태이다. 일단 영상에서 씨앗점을 선택해 주어야 하고, 이 점과 유사한 이웃 점들이 모두같은 색깔로 칠해진다. 다른 페인팅 프로그램과 조금 다른 점은 OpenCV의 플러드필은 주변 픽셀과 색상이 완전히 똑같을 필요가 없다는 점이다. Cv.FloodFill() 함수는 주변 픽셀값이 이미 색칠되어 있는 인접한 픽셀값 또는 씨앗점 픽셀값과 비교하여 특정 범위 안에 있으면 색을 칠한다. 플러드필은 선택적으로 전달되는 mask 인자에 의해 동작이 제한될수 있다.
FloodFill(CvArr image, CvPoint seed_point, CvScalar new_val, CvScalar lo_diff, CvScalar up_diff, out CvConnectedComp comp, int flags, CvArr mask); |
씨앗점으로 (흰색)지정
mask 인자는 cvFloodFill() 함수의 입력으로도 작용하고, 출력으로도 사용된다. 입력으로 사용될 경우에는 채우기가 적용될 영역을 제한하는 역할을 담당하고, 출력으로 사용될 경우에는 실제 채워진 영역을 가리키는 용도로 사용된다. Mask가 null이 아니라면, 입력 영상보다 가로, 세로 방향으로 2픽셀 더 큰, 8비트 1채널 영상이어야 한다. 입력영상보다 큰 영상으로 mask를 설정하는 이유는 내부 작업을 쉽고 빠르게 수행하기 위함이다. Mask 영상에서(x+1,y+1)위치의 픽셀은 입력 영상의 (x,y)좌표의 픽셀과 대응된다. Flags의 하위 8비트는 4또는 8값을 가질 수 있다. 이 값은 채우기 알고리즘에서 연결성을 제어하는 용도로 사용된다. 이 값이 8이면, 양쪽 대각선 방향으로 인접한 픽셀들도 이웃 픽셀로 간주도니다. 상위 8비트(16~23)는 CV_FLOODFILL_FIXED_RANGE 또는 CV_FLOODFILL_MASK_ONLY 값을 가질 수 있다. CV_FLOODFILL_FIXED_RANGE가 설정되면, 채우기 알고리즘에서 이웃 픽셀의 값과 비교하는 대신 씨앗점 픽셀값과 비교한다. CV_FLOODFILL_MASK_ ONLY가 설정되면 원본 영상에 채우기 결과를 설정하는 대신mask 영상에만 결과를 표현한다. CV_FLOODFILL_MASK_ONLY를 설정하는 경우 반드시 mask 인자값을 설정해 주어야 한다.
if (src == null) return; IplImage dst = Cv.CreateImage(src.Size, BitDepth.U8, 3);
IplImage tempimage = src.Clone();
//Cv.FloodFill(src, new CvPoint(3, 240),0,7.0,7.0); //Cv.FloodFill(src,new CvPoint(0,255), 255, 7.0, 7.0); CvConnectedComp aa = new CvConnectedComp();
Cv.FloodFill(src, Cv.Point(10, 255), Cv.RGB(255, 255, 255), Cv.ScalarAll(25.0),Cv.ScalarAll(25.0));
resultwb = new WriteableBitmap(src.Width, src.Height, 96, 96, PixelFormats.Bgr24, null);
WriteableBitmapConverter.ToWriteableBitmap(src, resultwb);
image2.Source = resultwb; |
'Programing > OpenCV' 카테고리의 다른 글
제스쳐 인식 (0) | 2016.11.30 |
---|---|
제스쳐 인식 (0) | 2016.11.30 |
Opencv C# 모폴로지 (0) | 2016.11.30 |
영상 모폴로지 자체 커널 만들기 (0) | 2016.11.30 |
영상 모폴로지 (0) | 2016.11.30 |