Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

カラー画像を作成する

全面同じ色のカラー画像を作成します。高さ、幅、チャンネルからなる3次元のndarrayを生成し、そのチャンネルに値をあたることでカラー画像を作成します。

やること
  • 横600px縦400pxの青(緑、赤)1色の画像を生成し別ウィンドウで表示する
  • キー入力で表示用ウィンドウを破棄し終了
使った関数
  • numpy.zeros : 全ての要素を0にした新しい配列を生成
  • cv2.imwrite : 画像を保存
環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • OpenCV 4.0.0

コード

import cv2  #OpenCVのインポート
import numpy as np  #numpyをnpという名前でインポート

#numpy.zerosは全ての要素を0にした新しい配列を生成する関数
#(400, 600, 3)は配列の形を指定しており、400要素X600要素X3要素の3次元配列
#それぞれ、画像の高さ(400)、画像の幅(600)、画素(B:青、G:緑、R:赤の3要素)に相当
#numpy.uint8はデータ形式として8ビットの符号なし整数(つまり0~255)を指定している
#よって「縦400横600の8ビットカラー(BGR)画像でBGRいずれも0(よって黒)」に相当する新しい配列を生成しオブジェクトimgに代入している

img=np.zeros((400, 600, 3), np.uint8)

#配列imgの書き換え。書き換える範囲の指定はstart:endで行うが、ブランクにすることで全要素の指定となる
#全てのピクセルのB(青)画素の輝度を255に変更→青画像になる
img[:,:,0]=255  

cv2.imwrite('blue.png',img) #オブジェクトimgを画像ファイル'blue.png'として保存

実行結果

横600px縦400pxの全面青画像が保存されます f:id:T_A_T:20190330141951p:plain

上の例では画素Bに相当する配列要素を0から255に書き換えて青画像を作っていましたが、画素G、画素Rに相当する配列要素を0から255に書き換えることで緑、赤の画像が作成できます。

以下の2行を変更

img[:,:,1]=255  
cv2.imwrite('green.png',img) #オブジェクトimgを画像ファイル'green.png'として保存

f:id:T_A_T:20190330142405p:plain

以下の2行を変更

img[:,:,2]=255  
cv2.imwrite('red.png',img) #オブジェクトimgを画像ファイル'red.png'として保存

f:id:T_A_T:20190330142543p:plain

複数のチャンネルを指定し、書き換える値をリストとすることで、複数のチャンネルをそれぞれ別の値に書き換えることができます。

以下の2行を変更。チャンネルの範囲指定'0:3'は「0から3の一つ前まで」を意味し、0,1,2を指定することになります。

img[:,:,0:3]=[153,51,204]  
cv2.imwrite('purple.png',img) #オブジェクトimgを画像ファイル'purple.png'として保存

f:id:T_A_T:20190330143243p:plain

以下のサイトを参考にさせていただきました

Pythonの文法メモ >> 【OpenCV】画像読み出しとサイズ・画素情報取得、切り抜き、貼り付け、チャネル操作

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村