플러드필은 영상에서 특정 영역을 고립시키거나 구분할 때 사용되는 기능이며영상 처리 및 영상 분석 등의 전처리 과정으로 널리 사용된다플러드필은 입력 영상으로부터 마스크를 만드는 용도로 사용될 수 있는데이러한 마스크는 추후 제한된 영역에서만 연산을 수행하도록 하여 전체 연산 속도를 향살시키는 용도로 사용될 수 있다.마스트는 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);



첫 번째 인자 image는 입력 영상이며, 8비트 또는 실수형이고, 1또는 3채널 영상이다플러드필은 씨앗점에서 시작하고추후 선택된 영역은 newVal값으로 색칠한다특정 픽셀값이 이미 색칠되어 있는 이웃 픽셀의 밝기값에서 lo_diff를 뺀 값보다 같거나 크고, up_Diff를 더한 값보다는 같거나 작을 경우이 픽셀을 newVal 값으로 색칠한다만약flags 인자에 CV_FLOODFILL_FIXED_RANGE 값이 포함되어 있따면인접한 이웃 픽셀과 값을 비교하지 않고 씨앗점의 픽셀값과 비교한다. comp인자가 null이 아니면채워진 영역에 대한 통계 정보를 담고 있는 CvConnectedComp 구조체를 가리킨다.                  

씨앗점으로 (흰색)지정

 



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 == nullreturn;

            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(10255), Cv.RGB(255255255), Cv.ScalarAll(25.0),Cv.ScalarAll(25.0));

            

            resultwb = new WriteableBitmap(src.Width, src.Height, 9696PixelFormats.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

+ Recent posts