OpenCV/OpenCV 강좌

OpenCV Python inpaint 함수 : 손상된 이미지 복원(Image Inpainting)

webnautes 2024. 4. 4. 21:33
반응형

inpaint 함수는 이미지에서 손상된 부분을 제거하고 그 자리를 자연스럽게 채워 넣어줍니다.



2024. 4. 4 최초작성




왼쪽 이미지가 원본 깊이 이미지입니다. 검은색으로 된 부분이 손상된 부분입니다. 오른쪽은 inpaint 함수를 사용하여 손상된 검은색 부분을 주변 픽셀로 메꾸어 자연스럽게 바꾼 결과입니다. 

 




전체 코드입니다.

 

import cv2


# 이미지를 로드합니다.
img_color = cv2.imread('fall-01-cam0-d-001.png')


# 그레이 스케일 이미지로 변환합니다.
img_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY)


# 검은색 영역을 마스크로 사용하기 위해 임계값을 설정합니다.
# cv2.THRESH_BINARY_INV를 사용하여 검은색 영역이 흰색이 되고, 나머지가 검은색이 되게 합니다.
_, mask = cv2.threshold(img_gray, 1, 255, cv2.THRESH_BINARY_INV)


# inpaint 함수를 사용하여 검은색 부분을 주변 색상으로 채웁니다.
inpainted_image = cv2.inpaint(img_gray,  # 손상된 원본 이미지
                              mask,      # 손상된 부분 또는 수정하고 싶은 영역을 나타내는 마스크 이미지입니다.  손상된 부분은 흰색(255)이고  나머지 부분은  검은색(0)이어야합니다.
                              3,         # 손상된 픽셀을 위해 고려할 주변 픽셀의 반경입니다
                              cv2.INPAINT_TELEA # 인페인팅 알고리즘을 선택합니다. cv2.INPAINT_TELEA 또는 cv2.INPAINT_NS
                              )


# 결과를 화면에 표시합니다.
img_result = cv2.hconcat([img_gray, inpainted_image])
cv2.imshow('result', img_result)
cv2.waitKey(0)


cv2.destroyAllWindows()




위 코드에서 사용한 hconcat 함수 사용법은 아래 포스트를 참고하세요.

 

OpenCV Python – 이미지 연결하는 hconcat, vconcat 예제

https://webnautes.tistory.com/1903 




이미지 출처

http://fenix.ur.edu.pl/~mkepski/ds/uf.html

 

링크에 있는 Depth data 이미지를 다운로드 받아서 이미지 한장을 사용했습니다.

 

 

 

반응형