[python] OpenCV를 사용하여 이미지에서 특정 패턴 인식하기

이미지 처리에는 많은 도구와 라이브러리가 있지만, 특히 OpenCV(Open Source Computer Vision Library)는 이미지 인식 및 컴퓨터 비전 작업에 널리 사용됩니다. 이번 글에서는 OpenCV를 사용하여 이미지에서 특정 패턴을 인식하는 방법에 대해 알아보겠습니다.

1. 패턴 인식을 위한 이미지 및 패턴 준비

우선, 패턴을 인식할 대상 이미지와 찾을 패턴 이미지를 준비해야 합니다. 이미지는 절대 경로나 URL을 통해 로드할 수 있습니다. 패턴 이미지는 인식하고자 하는 객체 또는 패턴의 형태입니다.

import cv2

# 이미지 로드
image = cv2.imread('image.png')  # 대상 이미지
pattern = cv2.imread('pattern.png')  # 패턴 이미지

2. 패턴 인식을 위한 이미지 전처리

패턴을 인식하기 전에 이미지를 전처리해야 합니다. 여기서는 대상 이미지와 패턴 이미지를 그레이스케일로 변환하고, 필요에 따라 블러 또는 샤프닝을 적용합니다.

# 그레이스케일 변환
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray_pattern = cv2.cvtColor(pattern, cv2.COLOR_BGR2GRAY)

# 필요한 전처리 작업 수행
# ...

3. 패턴 인식을 위한 매칭 작업

이제 전처리된 이미지를 사용하여 패턴을 인식할 수 있습니다. OpenCV에서는 다양한 매칭 알고리즘을 제공합니다. 여기서는 cv2.matchTemplate() 메서드를 사용하여 템플릿 매칭을 수행하겠습니다.

# 템플릿 매칭 수행
result = cv2.matchTemplate(gray_image, gray_pattern, cv2.TM_CCOEFF_NORMED)

# 매칭 결과의 유사도 추출
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

4. 패턴 인식 결과 확인

매칭 결과에서는 패턴과 대상 이미지의 유사도를 나타내는 값이 반환됩니다. 이 값을 기반으로 패턴이 인식된 영역을 확인하고 처리할 수 있습니다.

# 패턴이 인식된 영역 표시
threshold = 0.8  # 유사도 임계값
if max_val > threshold:
    # 패턴이 인식된 영역 좌표
    top_left = max_loc
    bottom_right = (top_left[0] + pattern.shape[1], top_left[1] + pattern.shape[0])
    
    # 영역 표시
    cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2)  # 초록색 사각형
    
    # 인식 결과 이미지 출력
    cv2.imshow('Result', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
else:
    print('패턴이 인식되지 않았습니다.')

이제 주어진 이미지에서 특정 패턴을 인식하는 방법을 알게 되었습니다. OpenCV를 사용하면 이미지 처리 작업을 훨씬 간편하게 수행할 수 있습니다. 추가로 OpenCV의 다양한 기능과 매칭 알고리즘을 익히면 다양한 이미지 처리 작업에 활용할 수 있습니다.

참고 자료