[파이썬] opencv-python 도형 인식 및 검출

OpenCV-Python은 컴퓨터 비전 및 이미지 처리 작업을 위한 강력한 도구입니다. 이 툴킷은 도형 인식과 검출에도 매우 유용합니다. OpenCV-Python을 사용하여 도형을 인식하고 검출하는 방법에 대해 알아보겠습니다.

설치

먼저, OpenCV-Python을 설치해야 합니다. 터미널에서 다음 명령어를 사용하여 설치할 수 있습니다.

pip install opencv-python

이미지 읽기

먼저, 이미지를 읽어와야 합니다. OpenCV-Python은 cv2.imread() 함수를 사용하여 이미지를 읽을 수 있습니다. 아래는 예제 이미지인 “shapes.jpg”를 읽는 코드입니다.

import cv2

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

# 이미지 출력
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

그레이스케일 변환

동작을 간소화하기 위해 이미지를 그레이스케일로 변환해야 합니다. cv2.cvtColor() 함수를 사용하여 이미지를 그레이스케일로 변환할 수 있습니다.

import cv2

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

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

# 이미지 출력
cv2.imshow("Gray Image", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

도형 인식

이제, 그레이스케일 이미지에서 도형을 인식해보겠습니다. cv2.findContours() 함수는 이미지에서 윤곽선을 찾을 수 있습니다. 윤곽선을 찾은 후, cv2.approxPolyDP() 함수를 사용하여 도형의 근사 윤곽선을 찾을 수 있습니다.

import cv2

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

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

# Canny 에지 검출
edges = cv2.Canny(gray, 50, 150)

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

# 도형 인식
for contour in contours:
    # 도형 근사 윤곽선
    approx = cv2.approxPolyDP(contour, 0.01 * cv2.arcLength(contour, True), True)

    # 도형 윤곽선 그리기
    cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)

# 이미지 출력
cv2.imshow("Shapes Detected", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

도형 검출

도형을 인식했다면 이제는 각 도형의 윤곽선을 기반으로 도형을 검출할 수 있습니다. cv2.matchShapes() 함수를 사용하여 도형을 비교하고 검출할 수 있습니다. 예를 들어, 원을 검출하기 위해서는 원의 윤곽선과의 매칭을 수행해야 합니다.

import cv2

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

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

# Canny 에지 검출
edges = cv2.Canny(gray, 50, 150)

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

# 도형 검출
for contour in contours:
    # 도형 매칭 비교
    match = cv2.matchShapes(contour, template_contour, cv2.CONTOURS_MATCH_I1, 0)

    # 원 검출
    if match < 0.1:
        # 원 윤곽선 그리기
        cv2.drawContours(image, [contour], 0, (0, 255, 0), 2)

# 이미지 출력
cv2.imshow("Circles Detected", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

이제 여러분은 OpenCV-Python을 사용하여 도형을 인식하고 검출하는 방법을 알게 되었습니다. 이를 기반으로 더 많은 이미지 처리 및 컴퓨터 비전 작업을 수행할 수 있습니다. OpenCV-Python은 매우 강력하고 유연한 툴킷이므로 다양한 응용 프로그램에서 활용할 수 있습니다. 창의적인 이미지 처리 프로젝트를 위해 OpenCV-Python을 사용해보세요!