【Python/OpenCV】カラートラッキング(色追跡)で移動物体の検出

この記事では、Python版OpenCVでカラートラッキング(色追跡)を実装し、移動物体を検出する方法をソースコード付きで解説します。

カラートラッキング(色追跡)

カラートラッキング(色追跡)は、その名の通り、特定の色のみを検出して追跡します。
カラートラッキングには、通常RGB色空間ではなく、同系統の色の範囲を数値で指定しやすいHSV色空間を用います。

関連記事
HSVの原理 HSV色空間の原理・特徴・計算式
色追跡の原理 HSV色空間とカラートラッキングによる物体追跡の原理

今回は、PythonとOpenCVでカラートラッキング(色追跡)を実装してみました。

HSV色空間の赤色

赤色の範囲 赤色の範囲(OpenCVのHSV色空間)
H 0~60, 300~360[度] 0~30, 150~179
S 50~100[%] 128~255
V 00~100[%] 0~255

ソースコード(Python3+OpenCV3)

サンプルプログラムのソースコードです。

# -*- coding: utf-8 -*-
import cv2
import numpy as np

def red_detect(img):
    # HSV色空間に変換
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    # 赤色のHSVの値域1
    hsv_min = np.array([0,127,0])
    hsv_max = np.array([30,255,255])
    mask1 = cv2.inRange(hsv, hsv_min, hsv_max)

    # 赤色のHSVの値域2
    hsv_min = np.array([150,127,0])
    hsv_max = np.array([179,255,255])
    mask2 = cv2.inRange(hsv, hsv_min, hsv_max)
    
    return mask1 + mask2


def main():
    # カメラのキャプチャ
    cap = cv2.VideoCapture("input.mp4")
    
    while(cap.isOpened()):
        # フレームを取得
        ret, frame = cap.read()

        # 赤色検出
        mask = red_detect(frame)

        # 結果表示
        cv2.imshow("Frame", frame)
        cv2.imshow("Mask", mask)

        # qキーが押されたら途中終了
        if cv2.waitKey(25) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main()

実行結果

サンプルプログラムの実行結果です。

関連記事
1 PythonでOpenCV入門 サンプル集
2 【Python】画像処理プログラミング入門
3 【画像処理入門】アルゴリズム&プログラミング

シェア&フォローお願いします!