반응형

검은색 빈공간을 채우는 OpenCV Python 예제입니다.



2024. 4. 17  최초 작성




실행 결과입니다.  왼쪽 원본 이미지에 보이는 검은색 공백들이 메꿔진 결과가  오른쪽 결과 이미지에 보입니다.

 




전체 코드입니다.



import cv2


def fill_internal_areas(image_array):

    # 그레이스케일로 변환합니다.
    gray = cv2.cvtColor(image_array, cv2.COLOR_BGR2GRAY)
   
    # 컨투어를 찾습니다.
    contours, hierarchy = cv2.findContours(gray, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
   
    if contours and hierarchy is not None:

        for idx, contour in enumerate(contours):
            #               0       1         2           3
            # Hierarchy는 [Next, Previous, First_Child, Parent] 값을 갖습니다.
            # 컨투어가 부모가 없다면 hierarchy[idx][3]는 -1입니다.
            if hierarchy[0, idx, 3] != -1:
                # 컨투어를 흰색으로 채웁니다.
                cv2.drawContours(image_array, [contour], -1, (255, 255, 255), cv2.FILLED)
   
    return image_array


img_original = cv2.imread('test.png')

# 이진화합니다.
_, binary_image = cv2.threshold(img_original, 127, 255, cv2.THRESH_BINARY)

# 검은색 빈 공백을 채웁니다.
img = fill_internal_areas(binary_image.copy())

# 원본 이미지와 결과 이미지를 나란히 보여줍니다.
result = cv2.hconcat([img_original, img])
cv2.imshow('result', result)
cv2.waitKey(0)




테스트에 사용한 이미지입니다.

 




반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts