[python] OpenCV를 사용하여 이미지에서 텍스트 영역 검출하기

이미지에서 텍스트 영역을 검출하는 것은 OCR (Optical Character Recognition) 또는 텍스트 인식 작업을 수행하는 데 중요한 단계입니다. 이를 위해 OpenCV 라이브러리를 사용하여 이미지에서 텍스트 영역을 검출하는 방법을 알아보겠습니다.

1. 이미지 읽기

먼저, 이미지를 읽어와야 합니다. OpenCV에서는 cv2.imread() 함수를 사용하여 이미지를 읽을 수 있습니다. 아래 예제는 image.jpg라는 이미지 파일을 읽고 보여주는 코드입니다.

import cv2

image = cv2.imread("image.jpg")

cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 이미지 전처리

이미지를 검출하기 전에 일부 전처리 작업을 수행해야 합니다. 이를 통해 이미지의 노이즈를 제거하거나 텍스트를 더 잘 검출할 수 있습니다. 일반적인 전처리 단계는 다음과 같습니다.

아래 예제는 이미지를 그레이스케일로 변환하고 이진화하는 코드입니다.

import cv2

# 이미지 읽기
image = cv2.imread("image.jpg")

# 이미지 그레이스케일로 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 이미지 이진화
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

cv2.imshow("Binary", binary)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. 텍스트 영역 검출

이제 이미지에 대해 전처리 작업을 진행했으므로, 텍스트 영역을 검출할 차례입니다. OpenCV에서는 cv2.findContours() 함수를 사용하여 이미지에서 외곽선을 검출할 수 있습니다. 이를 통해 텍스트 영역의 외곽선을 찾을 수 있습니다.

아래 예제는 이미지에서 텍스트 영역을 검출하고 해당 외곽선을 그리는 코드입니다.

import cv2

# 이미지 읽기
image = cv2.imread("image.jpg")

# 이미지 그레이스케일로 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 이미지 이진화
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 외곽선 검출
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 외곽선 그리기
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

cv2.imshow("Contours", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

결론

이제 OpenCV를 사용하여 이미지에서 텍스트 영역을 검출하는 방법에 대해 알아보았습니다. 위 예제 코드를 참고하여 자신의 이미지에서 텍스트 영역을 검출해보세요. 텍스트 영역 검출은 OCR 또는 텍스트 인식 작업에 매우 중요한 단계이므로 정확한 결과를 얻을 수 있도록 전처리 과정을 조정하는 것이 필요합니다.

참고 자료