【python-openCV】HSV色空間の概念を画像を使って詳細解説!

この記事では、Python-openCVにおけるHSV色空間の概念を解説していきます。

 

HSV色空間をうまく扱うことができれば、画像処理でできることの幅が大幅に広がるはずです。

また、人工知能をつかって画像を学習させたりする際にも、HSV画像を学習させた方が効率的だったりします。

 

さまざまな場面で活躍する知識になると思いますので、ぜひ最後までご覧ください。

 

それではさっそくやっていきましょう。

 

スポンサーリンク

HSV色空間とは?

まず始めにHSVとは何なのかを簡単に解説しておきましょう。

HSVとは、

H : Hue 色相

S : Saturation Chroma 彩度

V : Value Brightness 明度

の3つの要素をうまく組み合わせることで色を表現する手法です。

 

ここでH,S,Vの数値と色の関係を簡単に図で紹介しておきましょう。

左側の絵がHとSの関係を表したものです。

(左上がV=255、左下V=100で作成しています。)

 

また、右側の絵がVとSの関係を表したものです。

(右上がH=0、右下H=120で作成しています。)

 

このようにH,S,Vの数値を変化させることで様々な色を表現できることがわかります。

 

スポンサーリンク

openCV上でHSVを取り扱う方法

なんとなくH,S,Vの3つの数値を組み合わせることで色が表現できることは分かったと思います。

次はこれらの数値がopenCV上ではどのように表現されているのかを見てみましょう。

 

以下がopenCV上でのHSV色空間の概念図です。

HSV色空間では、画像の横、縦幅と同じサイズの面を3つ持つことになります。

0番目の面がHを表現し

1番目の面がSを表現し

2番目の面がVを表現しています。

 

これらの面の情報を組み合わせることで画像が表現されます。

 

画像処理を行う際は、

0番目の面の一番左上の数値を0にしろ!

とかいう指示をあたえれば、画像上の指定したピクセルの色を書き換えることが出来たりするわけです。

 

スポンサーリンク

numpyでHSV画像を作ってみる

なんとなく取り扱い方がわかってきたところで、実際に自分でnumpyをつかって配列を作成し、画像を作ってみましょう。

 

以下がpythonのサンプルコードです。

import cv2
import numpy as np
hsv1=np.zeros((255,180,3),np.uint8)
for i in range(180):
    for j in range(255):
        hsv1[j,i,1]=j
        hsv1[j,i,0]=i
hsv1[:,:,2]=255
hsv=np.flipud(hsv1)
bgr=cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
cv2.imwrite('HSV_sample1.jpg',bgr)


hsv2=np.zeros((255,255,3),np.uint8)
for i in range(255):
    for j in range(255):
        hsv2[j,i,1]=j
        hsv2[j,i,2]=i
hsv2[:,:,0]=0
hsv=np.flipud(hsv2)
bgr=cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
cv2.imwrite('HSV_sample2.jpg',bgr)

こいつを実行すると以下の2枚の画像が作成されます。

完成画像①HSV_sample1.jpg

完成画像②HSV_sample2.jpg

やっていることとしては、以下の通りです。

①3つの面をもつ適当な大きさの配列を作成

②その配列内の数値を少しづつ書き換える

③HSV色空間からBGR色空間に変換

(openCVで画像保存する際は勝手にBGR配列として扱われるため)

④いじくった配列画像を画像として保存

上記の作業をVを固定するパターンと、Hを固定するパターンに分けて実行しています。

 

先ほどまでに紹介したHSVの色空間の概念に照らし合わせながら、プログラムを読んでみてください。

おおよそやっていることは理解できるはずです。

(まったくプログラムが読めないひとは、まずはnumpyの配列処理から勉強していきましょう。)

スポンサーリンク

おわりに

というわけで今回はpython-openCVにおけるHSV色空間の概念を解説してみました。

冒頭にも説明しましたが、このあたりを自由自在に操ることが出来れば、画像処理はもちろん、AI開発においても非常に強力な武器になるはずです。

 

ぜひ時間をとってマスターしておきましょう。

このように、私のブログでは様々なプログラミングスキルを紹介しています。

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村 IT技術ブログへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました