カラースペースを使った実験

OpenCVOpenCVBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

OpenCV-Pythonのカラースペースに関するこのチュートリアルへようこそ!

カラースペースは、画像内の色チャネルを表現する方法です。いくつかの異なるカラースペースがありますが、最も一般的なものは3つです。

  • BGR(青、緑、赤):OpenCVで使用される既定のカラースペース。
  • グレー:画像のグレースケール表現。
  • HSV(色相、彩度、明度):色の円筒座標表現。
    このチュートリアルでは、BGR、グレー、およびHSVカラースペース間で画像を変換することに焦点を当てます。

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL opencv(("OpenCV")) -.-> opencv/BasicOperationsGroup(["Basic Operations"]) opencv(("OpenCV")) -.-> opencv/ImageProcessingGroup(["Image Processing"]) opencv/BasicOperationsGroup -.-> opencv/bitwise_and("Bitwise AND") opencv/BasicOperationsGroup -.-> opencv/imread("Image Read") opencv/BasicOperationsGroup -.-> opencv/imwrite("Image Write") opencv/ImageProcessingGroup -.-> opencv/cvt_color("Convert Color Space") opencv/ImageProcessingGroup -.-> opencv/in_range("Color Space Range") subgraph Lab Skills opencv/bitwise_and -.-> lab-21417{{"カラースペースを使った実験"}} opencv/imread -.-> lab-21417{{"カラースペースを使った実験"}} opencv/imwrite -.-> lab-21417{{"カラースペースを使った実験"}} opencv/cvt_color -.-> lab-21417{{"カラースペースを使った実験"}} opencv/in_range -.-> lab-21417{{"カラースペースを使った実験"}} end

カラースペース間での画像変換

画像をカラースペース間で変換するには、cv.cvtColor()関数を使用します。まず、必要なライブラリをインポートして画像を読み込みましょう。

Pythonシェルを開く

ターミナルに次のコマンドを入力してPythonシェルを開きます。

python3

既定のフォルダに用意した画像image.jpgを読み込むには、cv.imread()関数を使用します。

import cv2 as cv
import numpy as np

## 画像を読み込む
image = cv.imread('image.jpg')

BGRからグレースケールへ

画像をBGRからグレースケールに変換するには、cv.COLOR_BGR2GRAYフラグを使用します。

## 画像をグレースケールに変換する
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

BGRからHSVへ

画像をBGRからHSVに変換するには、cv.COLOR_BGR2HSVフラグを使用します。

## HSV色空間を使用する。HSV色空間は主に物体追跡に使用される
hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)

変換後の画像を表示する

元の画像と変換後の画像を表示するには、cv.imwrite()関数を使用します。

## 画像を指定したファイルに保存する
cv.imwrite('image.jpg', image)
cv.imwrite('gray_image.jpg', gray_image)
cv.imwrite('hsv_image.jpg', hsv_image)

特定の色の物体を抽出する

画像から特定の色の物体を抽出するには、cv.inRange()関数を使用できます。この例では、画像から青色の物体を抽出します。

色の範囲を定義する

まず、HSV色空間における青色の下限と上限を定義します。

## 青色は、360度のうち約240度の色相でHSVで表されます。
## OpenCV-HSVの色相範囲は0-180で、8ビットで値を格納します。
## したがって、青色はOpenCV-HSVでは色相Hが約240 / 2 = 120の値として表されます。
## 青色を正しく検出するには、次の値を選択できます。
blue_lower = np.array([100, 150, 0], np.uint8)
blue_upper = np.array([140, 255, 255], np.uint8)

画像を閾値処理する

HSV画像を閾値処理して、青色だけを取得します。

## 青色のマスク
blue_mask = cv.inRange(hsv_image, blue_lower, blue_upper)

マスクを適用する

マスクを元の画像に適用して、青色の物体を抽出します。

## マスクを使用して青色の物体を抽出する
blue_object = cv.bitwise_and(image, image, mask=blue_mask)

抽出した物体を表示する

元の画像と抽出した青色の物体を表示します。

## 画像を指定したファイルに保存する
cv.imwrite('blue_object.jpg', blue_object)

まとめ

このチュートリアルでは、OpenCV-Pythonのカラースペースの基本を学びました。この知識を使えば、さまざまなカラースペースを使ってさまざまな画像処理タスクに適用できます。また、OpenCVでサポートされている他のカラースペース(たとえばLABやYCrCb)を試してみることもできます。