728x90
OpenCV Inpainting은 이미지가 손상되거나 제거가 필요한 영역을 주변 픽셀 정보로 자연스럽게 복원하는 기술입니다. 본 블로그에서는 Inpainting의 원리와 OpenCV 함수 설명, 결과 이미지를 포함한 Python 예제를 통해 활용 방법을 설명하겠습니다.
OpenCV Inpainting 기술 설명
Inpainting은 이미지에서 결손 영역을 마스크로 지정하면, 해당 영역을 주변 픽셀 정보를 이용해 추정 및 복원하는 컴퓨터 비전 기반 이미지 처리 기술입니다. 오래된 사진 복원, 워터마크 제거, 객체 삭제 등 다양한 후처리 작업에 활용됩니다.
OpenCV에서는 cv2.inpaint() 함수를 통해 Inpainting 기능을 제공하며, 대표적으로 Telea 알고리즘과 Navier-Stokes 알고리즘을 지원합니다.
Telea 알고리즘 (cv2.INPAINT_TELEA)
- 처리 속도가 빠름
- 작은 결손 영역에 적합
- 주변 픽셀의 기울기 기반 복원
Navier-Stokes 알고리즘 (cv2.INPAINT_NS)
- 유체 역학 기반 복원 방식
- 경계가 많은 이미지에서 자연스러운 결과
- 연산 비용이 비교적 큼
Inpainting의 성능은 마스크 품질에 크게 의존하며, 마스크 이미지에서 흰색(255)은 복원 대상, 검은색(0)은 유지 영역을 의미합니다.
OpenCV Inpainting 예제 (Python)
아래 예제는 제거할 텍스트 영역을 마스크로 지정한 후, Inpainting을 통해 배경을 자연스럽게 복원하는 과정을 보여줍니다. 원본 이미지, 마스크 이미지, 최종 결과를 함께 시각화합니다.
import cv2
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw
# 1. 예제용 원본 이미지 생성
img = Image.new("RGB", (300, 200), "gray")
draw = ImageDraw.Draw(img)
draw.rectangle([50, 50, 250, 150], fill="lightblue")
draw.text((90, 80), "REMOVE THIS CHAR!!!", fill="black")
img.save("original.png")
# 2. 마스크 이미지 생성 (흰색 영역이 복원 대상)
mask = Image.new("L", (300, 200), 0)
mask_draw = ImageDraw.Draw(mask)
mask_draw.rectangle([80, 70, 200, 120], fill=255)
mask.save("mask.png")
# 3. OpenCV Inpainting 수행
image = cv2.imread("original.png")
mask_cv = cv2.imread("mask.png", cv2.IMREAD_GRAYSCALE)
result = cv2.inpaint(
image,
mask_cv,
3,
cv2.INPAINT_TELEA
)
cv2.imwrite("inpaint_result.png", result)
# 4. 결과 시각화
fig, axs = plt.subplots(1, 3, figsize=(9, 3))
axs[0].imshow(Image.open("original.png"))
axs[0].set_title("Original")
axs[1].imshow(mask, cmap="gray")
axs[1].set_title("Mask")
axs[2].imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB))
axs[2].set_title("Inpainting Result")
for ax in axs:
ax.axis("off")
plt.show()
아래는 파이썬 코드 수행한 결과로 원본 이미지의 문자가 제거되고 배경색으로 복원된 결과를 볼 수 있습니다.

728x90
'영상처리 도구' 카테고리의 다른 글
| OpenCV Parallel Processing 병렬 처리 개념, 성능 최적화, 실전 예제 (1) | 2025.12.30 |
|---|---|
| OpenCV SVM을 이용한 이미지 분류 방법과 예제 (0) | 2025.12.23 |
| OpenCV 머신러닝 SVM 설명과 활용 방법 (0) | 2025.12.19 |
| OpenCV 형태 분석 Hu Moment 설명과 활용 방법 (0) | 2025.12.18 |
| OpenCV 객체 추적 결과 시각화 필요성과 실전 팁 (0) | 2025.12.16 |
