OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
inRangeを用いたしきい値処理

前のチュートリアル: 基本的なしきい値処理
次のチュートリアル: 独自の線形フィルタを作ろう!

原著者Lorena García
互換性Rishiraj Surti

目標

このチュートリアルでは、以下の方法を学ぶ:

  • OpenCV の cv::inRange 関数を使って基本的なしきい値処理を行う。
  • HSV 色空間におけるピクセル値の範囲に基づいてオブジェクトを検出する。

理論

  • 前のチュートリアルでは、cv::threshold 関数を使ってしきい値処理を行う方法を学んだ。
  • このチュートリアルでは、cv::inRange 関数を使ってそれを行う方法を学ぶ。
  • 概念は同じだが、今回は必要なピクセル値の範囲を追加する。

HSV 色空間

HSV (hue, saturation, value) 色空間は、RGB カラーモデルに似た色空間を表すモデルである。色相(hue)チャンネルが色の種類をモデル化するため、色に基づいてオブジェクトを領域分割する必要がある画像処理タスクで非常に有用である。彩度(saturation)の変化は、灰色の濃淡を表す無彩色から、完全に彩度の高い状態(白成分なし)まで及ぶ。明度(value)チャンネルは色の明るさや強度を表す。次の画像は HSV 円柱を示している。

By SharkDderivative work: SharkD [CC BY-SA 3.0 or GFDL], via Wikimedia Commons

RGB 色空間の色は3つのチャンネルを使って符号化されるため、色に基づいて画像内のオブジェクトを領域分割するのはより難しい。

By SharkD [GFDL or CC BY-SA 4.0], from Wikimedia Commons

cv::cvtColor 関数を使ってある色空間から別の色空間に変換する際に用いる式は、色変換 で説明されている

コード

解説

プログラムの全体的な構造を確認しよう:

  • デフォルトの、または指定されたキャプチャデバイスからビデオストリームを取得する。

  • デフォルトのフレームとしきい値処理後のフレームを表示するためのウィンドウを作成する。

  • HSV 値の範囲を設定するためのトラックバーを作成する

  • ユーザーがプログラムを終了したくなるまで、次の処理を行う

  • 画像を表示する

  • 下限の範囲を制御するトラックバー、例えば色相値の場合:

    static void on_low_H_thresh_trackbar(int, void *)
    {
    low_H = min(high_H-1, low_H);
    setTrackbarPos("Low H", window_detection_name, low_H);
    }
  • 上限の範囲を制御するトラックバー、例えば色相値の場合:

  • しきい値の上限が下限より小さくなるといった矛盾を避けるため、最大値と最小値を求める必要がある。

結果

  • このプログラムをコンパイルした後、実行する。プログラムは2つのウィンドウを開く
  • トラックバーで範囲の値を設定すると、結果のフレームがもう一方のウィンドウに表示される。