【Python/OpenCV】窓画像の作成(切り取り)と部分処理

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の様々な使い方については以下ページでまとめています。

【Python版OpenCV超入門】使い方とサンプルコードを解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。

コメント