画像にグリッド線を引く
画像に格子状の線を引きます。ndarrayのスライシングはstep(いくつおきの要素を指定するか)を設定できるのでfor文を使わずに飛び飛びの要素を指定できます。例えば
img[20:150:40, :, :] = 255とすると、y=20から40ピクセルおきにy=150の手前まで(140まで)、すべてのxのすべてのチャンネル(BGR)の輝度を255とすることで等間隔の横線が引けます。
やること
- ファイル名を指定して画像ファイルを読み出す
- 決まった間隔の縦線、横線を引く
- ファイル名をつけて画像を保存
使った関数
- cv2.imread : 画像ファイルの読み出し
- img.shape : 画像の高さ、幅、チャンネル数を取得する
- cv2.imwrite : 画像を保存する
環境
準備
画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、ファイル名"fish.jpg"で、jupyter notebookファイル(***.ipynb)と同じディレクトリに保存しました。
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ピクセルおきに白い線が引かれます。
以下のサイトを参考にさせていただきました
DeepAge >> NumPy配列のスライシング機能の使い方