カラー画像を作成する
全面同じ色のカラー画像を作成します。高さ、幅、チャンネルからなる3次元のndarrayを生成し、そのチャンネルに値をあたることでカラー画像を作成します。
やること
- 横600px縦400pxの青(緑、赤)1色の画像を生成し別ウィンドウで表示する
- キー入力で表示用ウィンドウを破棄し終了
使った関数
- numpy.zeros : 全ての要素を0にした新しい配列を生成
- cv2.imwrite : 画像を保存
環境
コード
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の全面青画像が保存されます
上の例では画素Bに相当する配列要素を0から255に書き換えて青画像を作っていましたが、画素G、画素Rに相当する配列要素を0から255に書き換えることで緑、赤の画像が作成できます。
以下の2行を変更
img[:,:,1]=255 cv2.imwrite('green.png',img) #オブジェクトimgを画像ファイル'green.png'として保存
以下の2行を変更
img[:,:,2]=255 cv2.imwrite('red.png',img) #オブジェクトimgを画像ファイル'red.png'として保存
複数のチャンネルを指定し、書き換える値をリストとすることで、複数のチャンネルをそれぞれ別の値に書き換えることができます。
以下の2行を変更。チャンネルの範囲指定'0:3'は「0から3の一つ前まで」を意味し、0,1,2を指定することになります。
img[:,:,0:3]=[153,51,204] cv2.imwrite('purple.png',img) #オブジェクトimgを画像ファイル'purple.png'として保存
以下のサイトを参考にさせていただきました
Pythonの文法メモ >> 【OpenCV】画像読み出しとサイズ・画素情報取得、切り抜き、貼り付け、チャネル操作