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

이미지 처리를 위해 OpenCV를 사용하는 경우, 이미지나 동영상에서 원하는 색상을 필터링하는 기능이 자주 사용됩니다. 이번 블로그 포스트에서는 Python에서 OpenCV를 사용하여 이미지와 동영상에서 특정 색상을 필터링하는 방법에 대해 알아보겠습니다.

필요한 패키지 설치

먼저, OpenCV를 사용하기 위해 필요한 패키지를 설치해야 합니다.

pip install opencv-python

이미지에서 특정 색상 필터링하기

import cv2
import numpy as np

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

# BGR 색상 공간에서의 범위 설정 (파랑-초록-빨강)
lower_range = np.array([0, 0, 0])
upper_range = np.array([255, 255, 100])

# 이미지에서 범위에 해당하는 색상 추출
filtered_image = cv2.inRange(image, lower_range, upper_range)

# 결과 출력
cv2.imshow('Filtered Image', filtered_image)
cv2.waitKey(0)

위의 코드에서, cv2.imread를 사용하여 이미지를 로드합니다. 그리고 BGR 색상 공간에서의 필터링할 색상의 범위를 설정합니다. 이 예시에서는 파랑-초록-빨강 (BGR) 중 파랑과 녹색의 범위를 설정하여 추출하도록 하였습니다. 그 후, cv2.inRange 함수를 사용하여 이미지에서 해당 색상의 범위에 있는 픽셀을 추출하여 필터링된 이미지를 얻을 수 있습니다.

마지막으로, cv2.imshow 함수를 사용하여 필터링된 이미지를 보여줍니다. 이때, cv2.waitKey(0)를 사용하여 키 입력을 기다립니다.

동영상에서 특정 색상 필터링하기

import cv2
import numpy as np

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

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

    # 더 이상 프레임이 없으면 종료
    if not ret:
        break

    # BGR 색상 공간에서의 범위 설정 (파랑-초록-빨강)
    lower_range = np.array([0, 0, 0])
    upper_range = np.array([255, 255, 100])

    # 프레임에서 범위에 해당하는 색상 추출
    filtered_frame = cv2.inRange(frame, lower_range, upper_range)

    # 결과 출력
    cv2.imshow('Filtered Frame', filtered_frame)

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

# 해제
capture.release()
cv2.destroyAllWindows()

위의 코드에서, cv2.VideoCapture를 사용하여 동영상을 로드합니다. 그리고 capture.read를 사용하여 프레임을 읽습니다. 읽은 프레임이 없으면 종료합니다.

이미지에서와 마찬가지로, BGR 색상 공간에서의 필터링할 색상의 범위를 설정하고, cv2.inRange 함수를 사용하여 동영상 프레임에서 해당 색상의 범위에 있는 픽셀을 추출하여 필터링된 프레임을 얻을 수 있습니다.

마지막으로, cv2.imshow 함수를 사용하여 필터링된 프레임을 보여주고, ‘q’ 키를 누르면 종료합니다.

이제 위의 코드를 사용하여 이미지와 동영상에서 특정 색상을 필터링할 수 있습니다!