[python] 이미지 오브젝트 추적 및 이동

Table of Contents

OpenCV 설치

먼저, OpenCV를 설치해야 합니다. 파이썬의 경우, pip 명령어를 사용하여 쉽게 설치할 수 있습니다.

pip install opencv-python

이미지 오브젝트 추출

이미지에서 특정 오브젝트를 추출하기 위해, 우선 이미지를 로드합니다. OpenCV의 cv2.imread() 함수를 사용하여 이미지를 읽을 수 있습니다.

import cv2

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

다음으로, 오브젝트를 추출하기 위해 이미지에서 마스크를 생성합니다. 마스크는 오브젝트와 배경을 분리하기 위해 사용됩니다. OpenCV의 cv2.inRange() 함수를 사용하여 마스크를 생성할 수 있습니다.

import cv2
import numpy as np

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

# 마스크 생성
lower_blue = np.array([80, 100, 100])
upper_blue = np.array([120, 255, 255])
mask = cv2.inRange(image, lower_blue, upper_blue)

위 코드에서는 파란색 오브젝트를 추출하기 위해 HSV 색 공간을 사용하였습니다. 파란색 범위는 [80, 100, 100]에서 [120, 255, 255]로 설정하였습니다. 따라서 이 범위에 해당하는 색상만 마스크에 포함됩니다.

오브젝트 추적

오브젝트 추적을 위해 cv2.findContours() 함수를 사용합니다. 이 함수는 이미지에서 오브젝트의 외곽선을 찾아줍니다.

import cv2

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

# 마스크 생성
lower_blue = np.array([80, 100, 100])
upper_blue = np.array([120, 255, 255])
mask = cv2.inRange(image, lower_blue, upper_blue)

# 오브젝트 추적
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

위 코드에서 cv2.RETR_EXTERNAL은 오브젝트의 외곽선 중 가장 바깥쪽 외곽선만 반환하도록 설정한 것입니다.

추적한 오브젝트 이동

추적한 오브젝트를 이동시키기 위해, cv2.drawContours() 함수를 사용하여 이미지에 렌더링합니다.

import cv2

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

# 마스크 생성
lower_blue = np.array([80, 100, 100])
upper_blue = np.array([120, 255, 255])
mask = cv2.inRange(image, lower_blue, upper_blue)

# 오브젝트 추적
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 추적한 오브젝트 이동
for contour in contours:
    # 추적한 오브젝트 위치 추출
    x, y, w, h = cv2.boundingRect(contour)
    
    # 오브젝트 이동
    new_x = x + 10
    new_y = y + 10
    
    # 이동한 오브젝트 그리기
    cv2.rectangle(image, (new_x, new_y), (new_x + w, new_y + h), (0, 255, 0), 2)

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

위 코드에서는 추적한 오브젝트의 왼쪽 상단 모서리 좌표에서 10만큼 이동시킨 위치로 오브젝트를 그립니다. 이러한 방식으로 오브젝트를 이동시킬 수 있습니다.

이제 이미지 내의 오브젝트를 추출하고, 추출한 오브젝트를 이동시키는 방법에 대해 알아보았습니다. 따라서 OpenCV를 사용하여 이미지 오브젝트 추적 및 이동을 쉽게 구현할 수 있습니다.

참고 자료: