[python] OpenCV를 사용하여 이미지에서 동영상에서 모서리 감지하기

이번 포스트에서는 Python의 OpenCV 라이브러리를 사용하여 이미지나 동영상에서 모서리를 감지하는 방법에 대해 알아보겠습니다.

1. 환경 설정

먼저 OpenCV를 설치해야 합니다. 아래와 같은 명령을 사용하여 설치할 수 있습니다.

pip install opencv-python

설치가 완료되면, 아래와 같이 OpenCV를 import 합니다.

import cv2

2. 이미지에서 모서리 감지

먼저, 이미지에서 모서리를 감지하는 방법에 대해 알아보겠습니다. 아래는 이미지에서 모서리를 검출하는 간단한 코드입니다.

import cv2

# 이미지 로드
image = cv2.imread('image.jpg')

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

# 모서리 감지
corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 10)

# 감지된 모서리 표시
for corner in corners:
    x, y = corner.ravel()
    cv2.circle(image, (x, y), 3, (0, 255, 0), -1)

# 결과 출력
cv2.imshow('Corners', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

위 코드에서는 cv2.goodFeaturesToTrack() 함수를 사용하여 이미지에서 모서리를 검출합니다. 이 함수는 그레이 스케일 이미지와 필요한 모서리의 개수를 입력으로 받습니다. 검출된 모서리는 cv2.circle() 함수를 사용하여 원으로 표시됩니다.

3. 동영상에서 모서리 감지

이미지가 아닌 동영상에서 모서리를 감지하려면 약간의 수정이 필요합니다. 아래는 동영상에서 모서리를 감지하는 코드 예제입니다.

import cv2

# 동영상 로드
video = cv2.VideoCapture('video.mp4')

while True:
    # 프레임 읽기
    ret, frame = video.read()

    if not ret:
        break

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

    # 모서리 감지
    corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 10)

    # 감지된 모서리 표시
    if corners is not None:
        corners = np.int0(corners)
    
        for corner in corners:
            x, y = corner.ravel()
            cv2.circle(frame, (x, y), 3, (0, 255, 0), -1)

    # 결과 출력
    cv2.imshow('Corners', frame)

    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 종료
video.release()
cv2.destroyAllWindows()

위 코드에서는 cv2.VideoCapture() 함수를 사용하여 동영상을 로드하고, video.read()를 호출하여 프레임을 읽습니다. 이후의 로직은 이미지에서 모서리를 감지하는 코드와 유사합니다. cv2.imshow() 함수를 사용하여 감지된 모서리가 표시된 프레임을 출력하며, ‘q’ 키를 누르면 종료됩니다.

마치며

위의 예제들을 통해 OpenCV를 사용하여 이미지와 동영상에서 모서리를 감지하는 방법을 알아보았습니다. 이를 응용하여 다양한 컴퓨터 비전 작업에 활용할 수 있습니다.

더 많은 OpenCV 함수와 기능을 탐구해보고 싶다면 OpenCV 공식 문서를 참조하시기 바랍니다.