[python] OpenCV를 사용하여 이미지에서 동영상에서 특정 색상 분리하기

OpenCV는 컴퓨터 비전 및 이미지 처리를 위한 라이브러리입니다. 이를 통해 이미지와 동영상에 대한 다양한 작업을 수행할 수 있습니다. 이번에는 OpenCV를 사용하여 이미지 또는 동영상에서 특정 색상을 분리하는 방법에 대해 알아보겠습니다.

필요한 라이브러리 설치

우선 해당 기능을 구현하기 위해 필요한 OpenCV 라이브러리를 설치해야 합니다. 아래의 명령을 사용하여 설치할 수 있습니다.

pip install opencv-python

이미지에서 특정 색상 분리하기

이미지에서 특정 색상을 분리하는 방법은 다음과 같습니다.

import cv2
import numpy as np

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

# BGR에서 HSV로 변환
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 분리할 색상 범위 설정
lower_color = np.array([0, 100, 100])
upper_color = np.array([10, 255, 255])

# 색상 분리
mask = cv2.inRange(hsv_image, lower_color, upper_color)

# 결과 이미지 출력
result = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

위 코드에서는 먼저 cv2.imread 함수를 사용하여 이미지를 로드합니다. 그 후, cv2.cvtColor 함수를 사용하여 BGR 형식의 이미지를 HSV 형식으로 변환합니다. HSV 형식은 색상을 표현하기에 편리한 형식입니다.

다음으로, 분리할 색상의 범위를 설정합니다. 이 예제에서는 빨간색을 분리하기 위해 하한값 [0, 100, 100]과 상한값 [10, 255, 255]을 사용합니다.

cv2.inRange 함수를 사용하여 설정한 범위 내의 색상을 분리합니다. 결과는 이진 이미지 형태로 반환됩니다.

마지막으로, cv2.bitwise_and 함수를 사용하여 분리된 색상만을 가져와서 결과 이미지를 생성합니다. 결과 이미지는 cv2.imshow 함수를 사용하여 출력됩니다.

동영상에서 특정 색상 분리하기

동영상에서 특정 색상을 분리하는 방법은 이미지와 매우 유사합니다. 다만, 각 프레임마다 위 과정을 반복하여 적용해야 합니다. 아래의 코드는 동영상에서 특정 색상을 분리하는 예제입니다.

import cv2
import numpy as np

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

while True:
    # 프레임 읽기
    ret, frame = cap.read()
    
    if not ret:
        break
    
    # BGR에서 HSV로 변환
    hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 분리할 색상 범위 설정
    lower_color = np.array([0, 100, 100])
    upper_color = np.array([10, 255, 255])

    # 색상 분리
    mask = cv2.inRange(hsv_frame, lower_color, upper_color)

    # 결과 이미지 출력
    result = cv2.bitwise_and(frame, frame, mask=mask)
    cv2.imshow('result', result)
    
    # 종료 조건
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

위 코드에서는 먼저 cv2.VideoCapture 함수를 사용하여 동영상을 로드합니다. 그런 후, cap.read()를 통해 각 프레임을 읽습니다.

읽은 프레임에 대해 위와 같은 과정을 반복하여 적용합니다. 마찬가지로, cv2.imshow 함수를 사용하여 분리된 색상이 적용된 프레임을 출력합니다.

동영상 재생은 cv2.waitKey 함수를 이용하여 작업 중단을 지연시키는 것으로 수행됩니다. 종료하려면 ‘q’를 누르면 됩니다.

이렇게 OpenCV를 통해 이미지 및 동영상에서 특정 색상을 분리하는 방법을 알아보았습니다. OpenCV의 다양한 기능과 라이브러리의 메소드를 활용하여 이미지 및 동영상 처리에 많은 창의성을 발휘할 수 있습니다.

참고 자료