PythonとOpenCVで特定の色(青)を検出する方法
画像処理は難しく感じられるかもしれませんが、実は思っているほど複雑ではありません。このチュートリアルでは、PythonとOpenCVを使った基本的な色検出の方法を解説します。
コンピュータ上での色の仕組み
コンピュータでは、色を「色空間(カラースペース)」や「カラーモデル」と呼ばれる形式で表現します。これは、色の範囲を数値のタプルとして記述する仕組みです。
ここでは、最も広く使われている2つの色空間、RGB(赤・緑・青)とHSV(色相・彩度・明度)について見ていきましょう。
RGBは、色を3つの成分からなるタプルとして表現します。各成分は0〜255の値を取ることができ、(0, 0, 0)は黒、(255, 255, 255)は白を表します。例えば、画面に純粋な青のピクセルを表示する場合、R値は0、G値は0、B値は255となります。
以下に、RGBでの色の例をいくつか示します。
| 色 | RGB値 |
|---|---|
| 赤 | 255, 0, 0 |
| オレンジ | 255, 128, 0 |
| ピンク | 255, 153, 255 |
一方、HSVではピクセルを3つのパラメータ、すなわち色相(Hue)、彩度(Saturation)、明度(Value)で表現します。ただし、RGBとは異なり、HSVは原色の組み合わせではなく、「色相」と呼ばれるピクセル本来の色味や色合いを使って色を表すのが特徴です。
彩度は色の鮮やかさ(強度)を表し、0が無彩色、255が最大の強度を意味します。明度はその色がどれだけ明るいか、あるいは暗いかを示します。
目的の色を検出する
それでは、まず作業に使用する画像をダウンロードしましょう。

画像が用意できたら、いよいよ本題に入ります。お好みのPythonエディタまたはIDEを開いて、早速始めてみましょう。
import cv2
import numpy as np
import imutils
img = cv2.imread('color2.jpg')上記のコードでは、最初の2行で必要なモジュールをインポートしています。3行目ではimutilsモジュールを読み込んでいます。これは画像のリサイズや色の範囲の検出に便利なライブラリです。4行目で対象となる画像を読み込みます。
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
次に、画像をHSV形式に変換します。HSVを使うことで、色情報から明るさの強度を分離できるため、色の検出が格段に容易になります。
lower_range = np.array([110,50,50]) upper_range = np.array([130,255,255])
ここで、検出したい青色の上限値と下限値を定義します。適切な範囲を見つけるには、imutilsライブラリに含まれるrange-detectorスクリプトを活用すると便利です。決定した値はNumPy配列として格納します。
mask = cv2.inRange(hsv, lower_range, upper_range)
この行では、指定した青色に対応するマスクを作成しています。マスクとは、画像の中の特定の部分を表すものです。ここではHSV画像を走査し、下限値と上限値の間にある色を検出しています。条件に一致した領域がmask変数に格納されます。
cv2.imshow('image', img)
cv2.imshow('mask', mask)
while(True):
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()最後に、元の画像とマスク画像を並べて表示し、結果を確認できます。コード内の0xFFの意味については、関連記事を参照してください。その後、プログラムはユーザーが「Esc」キーを押すのを待ち、キーが押されるとすべてのウィンドウを閉じて終了し、後処理を行います。
完成版プログラム
import cv2
import numpy as np
import imutils
img = cv2.imread('color2.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_range = np.array([110,50,50])
upper_range = np.array([130,255,255])
mask = cv2.inRange(hsv, lower_range, upper_range)
cv2.imshow('image', img)
cv2.imshow('mask', mask)
while(True):
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()実行結果

上記の実行結果を見ると、マスク画像にいくつか黒い斑点が確認できます。これらはノイズであり、実際の色検出処理ではノイズ除去フィルターなどを組み合わせて精度を高めるのが一般的です。
-
【Python】Tkinterで作るカラーゲーム – 30秒で文字の色を当てるGUIゲーム開発
GUIアプリケーションの開発において、Pythonの標準ライブラリ「Tkinter」は非常に人気が高く、初心者でも扱いやすいツールです。追加のインストール作業なしに使えるため、Tkinterを活用すればシンプルなGUIゲームでも手軽に開発できます。 この記事では、Tkinterを使った「カラーゲーム」の作り方を紹介します。このゲームでは、画面に表示される単語の文字色をプレイヤーが入力し、正解するたびにスコアが1点ずつ加算されます。制限時間は30秒で、使用される色は赤(Red)、青(Blue)、緑(Green)、ピンク(Pink)、黒(Black)、黄(Yellow)、オレンジ(Orange)、
-
PythonとOpenCVを使って動画を逆再生(リバース再生)する方法
OpenCVは「Open Source Computer Vision(オープンソース・コンピュータビジョン)」の略称です。この強力なライブラリを活用することで、画像や動画に対してさまざまな操作を実行できます。OpenCVの主な応用分野顔認識システムモーショントラッキング(動体追跡)人工ニューラルネットワーク深層ニューラルネットワーク動画ストリーミング などOpenCVのインストール方法Windows環境では、以下のコマンドでインストールできます。pip install opencv-pythonLinux環境の場合は、次のコマンドを使用します。sudo apt-get install pyt