Pythonで図形の外接矩形を描く(OpenCV編)
PythonのOpenCV(cv2)モジュールを使って、図形の外接矩形を描きます。
目次
外接矩形とは
外接矩形というのは、図形の外側に接する四角形のことです。
外接矩形が描けると、図形の部分だけをクロップしたりすることができるようになります。
本記事では輪郭から外接矩形を描き出します。輪郭の導出の仕方については、 輪郭の導出を解説した記事 を参照してください。カラー画像の場合は輪郭の導出の前に2値化が必要になりますので、 2値化の方法を解説した記事 を参照してください。
外接矩形の座標を計算する
findContoursメソッドで出力される輪郭の情報は、輪郭を表す点の座標の集まりになっています。boundingRectメソッドを使うと、点群から外接矩形の座標を計算できます。
つまり、輪郭線を表す点群の座標の集まりから、その点群の外接矩形の座標を導き出すわけです。
retval = cv2.boundingRect(array)
変数 |
型 |
内容 |
---|---|---|
array |
tuple |
輪郭を表す座標の集まり。(注) |
retval |
tuple |
外接矩形の座標を示すタプル。 (x, y , w, h) |
(注)グレースケール画像データを引数にすることもできます。
戻り値は、外接矩形の右上の点のx座標、y座標、矩形の幅、高さ、のタプルになります。座標のデータの型はintです。
外接矩形を画像に描く
矩形の座標が計算できたら、その座標の情報を使って矩形を描きます。
cv2.rectangle(img, pt1, pt2, color, [thickness], [lineType], [shift])
変数 |
型 |
内容 |
---|---|---|
img |
ndarray |
矩形を書き込む画像データ。 |
pt1 |
tuple |
矩形の右上隅の座標。(x, y) |
pt2 |
tuple |
矩形の左下隅の座標。(x, y) |
color |
tuple |
矩形の線色。(r, g, b) |
thickness |
int |
省略可。既定値は1。線幅。 |
linetype |
省略可。既定値はLINE_8。線種。 |
|
shift |
int |
省略可。既定値は0。 |
右上と左下の座標を指定して矩形を書き込みます。
外接矩形の描画実施例
記号の外接矩形を書き込んでみます。
元の画像はこれです。
コードはこうしました。
import cv2
im = cv2.imread('test.png')
im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
retval, im_bw = cv2.threshold(im_gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 輪郭の検出
contours, hierarchy = cv2.findContours(im_bw, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 輪郭を1つずつ書き込んで出力
for i in range(len(contours)):
im_con = im.copy()
x, y, w, h = cv2.boundingRect(contours[i])
cv2.rectangle(im_con, (x, y), (x + w, y + h), (0, 255, 0), cv2.LINE_4)
cv2.imwrite('result' + str(i) + '.png', im_con)
出力はこうなりました。
公開日
広告
Pythonで画像処理カテゴリの投稿
- Python (Pillow)でグラデーション画像を作る
- PythonでGIFアニメを作る(PILでファイルをつなげる編)
- PythonでOpenCVの画像データをMatplotlibで表示する
- PythonでPDFを画像に変換する(Windows10)
- PythonでPSDファイルをJPEGやPNGに変換する
- Pythonでカラー画像をグレイスケールに変換する(OpenCV編)
- Pythonでフォルダ内に同じ画像がないか検索してみた
- Pythonでマスク画像を作る方法(3選)
- Pythonで図形の外接矩形を描く(OpenCV編)
- Pythonで図形の輪郭の大きさを調べる(OpenCV編)
- Pythonで画像の余白を削除する(OpenCV編)
- Pythonで画像の余白を削除する(Pillow編)
- Pythonで画像の大きさやフォーマットを調べる(Pillow編)
- Pythonで画像の減色をする
- Pythonで画像をトリミングする(Pillow編)
- Pythonで画像を他の画像にペーストする(Pillow編)
- Pythonで画像を回転する(Pillow編)
- Pythonで画像を拡大縮小(リサイズ)する(Pillow編)
- Pythonで画像を読み込み、表示し、保存する(OpenCV編)
- Pythonで画像を読み込み、表示し、保存する(Pillow編)
- Pythonで画像を2値化する(OpenCV編)
- Pythonで記号の輪郭を検出する(OpenCV編)
- PythonとOpenCVで画像をグレースケールに変換してみた
- PythonとOpenCVで画像をネガポジ反転してみた