Pythonでいろいろやってみる

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

画像にグリッド線を引く

画像に格子状の線を引きます。ndarrayのスライシングはstep(いくつおきの要素を指定するか)を設定できるのでfor文を使わずに飛び飛びの要素を指定できます。例えば
img[20:150:40, :, :] = 255とすると、y=20から40ピクセルおきにy=150の手前まで(140まで)、すべてのxのすべてのチャンネル(BGR)の輝度を255とすることで等間隔の横線が引けます。

やること
  • ファイル名を指定して画像ファイルを読み出す
  • 決まった間隔の縦線、横線を引く
  • ファイル名をつけて画像を保存
使った関数
  • cv2.imread : 画像ファイルの読み出し
  • img.shape : 画像の高さ、幅、チャンネル数を取得する
  • cv2.imwrite : 画像を保存する
環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • OpenCV 4.0.0
準備

画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、ファイル名"fish.jpg"で、jupyter notebookファイル(***.ipynb)と同じディレクトリに保存しました。 f:id:T_A_T:20190328231224j:plain
fish.jpg

コード
import cv2  #OpenCVのインポート

fname = "fish.jpg" #画像ファイル名

y_step=20 #高さ方向のグリッド間隔(単位はピクセル)
x_step=40 #幅方向のグリッド間隔(単位はピクセル)

img = cv2.imread(fname) #画像を読み出しオブジェクトimgに代入

#オブジェクトimgのshapeメソッドの1つ目の戻り値(画像の高さ)をimg_yに、2つ目の戻り値(画像の幅)をimg_xに
img_y,img_x=img.shape[:2]  

#横線を引く:y_stepからimg_yの手前までy_stepおきに白い(BGRすべて255)横線を引く
img[y_step:img_y:y_step, :, :] = 255
#縦線を引く:x_stepからimg_xの手前までx_stepおきに白い(BGRすべて255)縦線を引く
img[:, x_step:img_x:x_step, :] = 255

cv2.imwrite('grid.png',img) #ファイル名'grid.png'でimgを保存

実行結果

高さ方向に20ピクセル、幅方向に40ピクセルおきに白い線が引かれます。

f:id:T_A_T:20190329175007p:plain

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

DeepAge >> NumPy配列のスライシング機能の使い方

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

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