영상처리

<C++> 이미지에서 비어있는 부분 채우기 2

park__ 2022. 4. 4. 16:39

 이전 글에서 했던 방법을 사용하여 이미지를 채울 때 이미지가 코너에 있는 경우 원하는 이미지가 나오지 않는다.

코너에 있는 이미지

 위와 같은 이미지를 이전 방법으로 사용할 경우 전체가 흰색으로 나온다.

 

 이를 해결하는 방법으로 이미지를 카피한 후 가장 끝에 선을 그려준다.

Mat img = imread("..\\corner_donut.bmp", IMREAD_GRAYSCALE);
Mat im_clone =  img.clone();
Mat im_floodfill_inv;
int start_x = 0;
int start_y = 0;

uchar *img_data = im_clone.data;
while(1){
	if (img_data[start_x] == 255) 
	{
		start_x++;
	}
	else 
	{
		break;
	}

floodFill(im_clone, Point(start_x, start_y), Scalar(255));
bitwise_not(im_clone, im_floodfill_inv);
Mat im_out = (img | im_floodfill_inv);

im_floodfill_inv 이미지 / img_out 이미지

시작 부분이 흰색일 경우 검정색인 부분을 찾아 시작하게 해주는 반복문을 넣었다.