Python : 画像のサイズ、チャンネルの取得

Pythonで画像を扱う際に、地味に必要になる、下記の取得方法についてです。

・画像サイズ

・チャンネル

 

画像サイズは、例えばレナさんの写真の中心はどこだろう?と思ったとき、

ただ眺めているだけではわからないですので、.shapeというのを使用します。

プログラムは下記のとおりです。

使う画像はいつものレナさんです。

f:id:Kangkang1981:20200310225916j:plain

 

#Opencvの読み込み

import cv2

#画像を読み込む
frame = cv2.imread('lena_color.jpg')

#サイズ、チャンネルを読み込む

h,w,c = frame.shape

#表示します。
print('h : ' + str(h))
print('w : ' + str(w))
print('c : ' + str(c))

結果は下記のように、縦横とチャンネルがわかります。

f:id:Kangkang1981:20200311210952p:plain

グレイ画像に変換した後に実施すると

#gray画像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

h_gray,w_gray = gray.shape
print('h_gray : ' + str(h_gray))
print('w_gray : ' + str(w_gray))

チャンネルが1チャンネルしかないため、上のように、縦横のみの取得です。

結果は同じですね。

f:id:Kangkang1981:20200311211604p:plain

ちなみに、spyderを使っている方ですと、

基本的には、画面右上の変数エクスプローラーで見れます。便利です!

f:id:Kangkang1981:20200311211803p:plain

チャンネルですけど、なんで必要かというと、ブランク画像とか、別の画像と組み合わせるときに同じに合わせないといけないのですね。

上のようなframe画像とGray画像を合成してとかはできないので、

あらかじめ合わせてから処理が必要となるのですね。

 

なので、blank(黒一色)画像とかを作る際は下記のように、

高さ、幅、チャンネルを付けるのですが、

 

下記はframe(3チャンネルのカラー画像)と対応できて、

blank = np.zeros*1

下記はGray(1チャンネルの白黒画像)と対応できます。

blank = np.zeros*2

 

蛇足ですが、このblank画像を白にしたいときは

blank +=255ってやればOKです。

私は最近まであまり理解していなかったのです

光量が多 = 白(255)

光量が少 = 黒(0)

なんとなく逆だと思っていました。

 

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。

*1:h,w,3

*2:h,w,1