Python版OpenCVで画像の一部分を切り取り、窓画像を作る方法をソースコード付きで解説します。
窓画像の作成(切り取り)
ROI(Region of Interest)とは、画像データのうち、操作の対象として選ぶ領域のことです。
「対象領域」「注目領域」「関心領域」「窓画像」などとも呼ばれます。
Pythonでは、NumPyのスライスを使うことで、OpenCVで読み込んだ画像の一部分を切り取って窓画像を作成できます。
サンプルコード
サンプルプログラムのソースコードです。
実行結果
■入力画像(左がinput2.png)、出力画像(右がroi.png)
ポイント解説
① 以下で窓画像の左上の座標を設定します。ここでは、左上の座標が(50, 100)に設定されています。
x, y = 50, 100
② 窓画像の幅と高さを設定します。ここでは、幅と高さがそれぞれ500ピクセルに設定されています。
width, height = 500, 500
③ 入力画像から指定された範囲を切り取ります。ここでは、上記で設定したとおり、(50, 100)から幅500ピクセル、高さ500ピクセルの範囲を切り取っています。
roi = img[y:y+height, x:x+width]
「img[y:y+height, x:x+width]」は、NumPyのスライス機能で配列の部分抽出を行っています。
y:y+heightは、抽出するNumPy配列の縦方向(行)の範囲を指定しています。yは切り取り開始の行の位置で、y+heightは切り取り終了の行の位置です。
yが100でheightが500の場合、100行目から599行目までの範囲を指定しています。
同じく、x:x+widthは、画像の横方向(列)の範囲を指定しています。xは切り取り開始の列の位置で、x+widthは切り取り終了の列の位置です。例えば、xが50でwidthが500の場合、50列目から549列目までの範囲が指定されます。
画像の部分処理
ROIは、画像の切り抜きでなく部分処理にも使うことができます。
サンプルコード
サンプルプログラムのソースコードです。
実行結果
■入力画像(左がinput2.png)、出力画像(右がex13.png)
ポイント解説
このコードでは、cv2.cvtColor関数を使用して、切り取った部分(roi)をグレースケールに変換し、さらにそれを3チャンネルの画像に変換して元の画像に戻しています。
これにより、指定した部分がグレースケールに変換された画像が保存されます。
関連ページ
Python版OpenCVの様々な使い方については以下ページでまとめています。
コメント