OpenCV入門 (2) - 図形の描画
OpenCVで「図形の描画」を行う方法を説明します。「直線」「円」「矩形」「楕円」「テキスト」を描画します。
・Python 3.7
・OpenCV 4.5
前回
1. インストール
Pythonの仮想環境でOpenCVパッケージをインストール。
$ pip install opencv-python
2.直線
直線を描画するプログラムは次の通りです。
import numpy as np
import cv2
# 白イメージの生成
img = np.full((256,256,3), 255, np.uint8)
# ラインの描画
cv2.line(img, (0,0), (255, 255), (0, 0, 255), 5)
# イメージの表示
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
直線の描画にはcv2.line()を使います。
img = cv.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
img: イメージ
pt1: ラインの始点
pt2: ラインの終点
color: 色または明るさ(グレースケールイメージ)
thickness: ラインの太さ(マイナスは塗り潰し)
lineType: ラインの種別
cv.FILLED: 塗り潰し
cv.LINE_4: 4-connected
cv.LINE_8: 8-connected
cv.LINE_AA: アンチエイリアス
shift: 頂点の小数ビットの数
3. 矩形
矩形を描画するプログラムは次の通りです。
# 長方形の描画
cv2.rectangle(img, (10, 10), (100, 100), (0,255,0), 5)
矩形の描画にはcv2.rectangle()を使います。
img = cv.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
img = cv.rectangle(img, rec, color[, thickness[, lineType[, shift]]])
img: イメージ
pt1: 長方形の頂点
pt2: pt1の反対側の長方形の頂点
color: 色または明るさ(グレースケールイメージ)
thickness: ラインの太さ(マイナスは塗り潰し)
lineType: ラインの種別
cv.FILLED: 塗り潰し
cv.LINE_4: 4-connected
cv.LINE_8: 8-connected
cv.LINE_AA: アンチエイリアス
shift: 頂点の小数ビットの数
4. 円
円を描画するプログラムは次の通りです。
# 円の描画
cv2.circle(img,(40, 40), 30, (255, 0, 0), -1)
円の描画にはcv2.ellipse()を使います。
img = cv.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
img: イメージ
center: 中心点
radius: 半径
color: 色または明るさ(グレースケールイメージ)
thickness: ラインの太さ(マイナスは塗り潰し)
lineType: ラインの種別
cv.FILLED: 塗り潰し
cv.LINE_4: 4-connected
cv.LINE_8: 8-connected
cv.LINE_AA: アンチエイリアス
shift: 頂点の小数ビットの数
5. 楕円
楕円を描画するプログラムは次の通りです。
# 楕円の描画
cv2.ellipse(img, (40, 40), (30, 30), 0, 0, 180, (0, 0, 255), -1)
楕円の描画にはcv2.ellipse()を使います。
img = cv.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])
img = cv.ellipse(img, box, color[, thickness[, lineType]])
img: イメージ
center: 楕円の中心点
axes: 主軸のサイズの半分
angle: 回転角度(度)
startAngle: 弧の開始角度(度)
endAngle: 弧の終了角度(度)
color: 色または明るさ(グレースケールイメージ)
thickness: ラインの太さ(マイナスは塗り潰し)
lineType: ラインの種別
cv.FILLED: 塗り潰し
cv.LINE_4: 4-connected
cv.LINE_8: 8-connected
cv.LINE_AA: アンチエイリアス
shift: 頂点の小数ビットの数
6. 多角形
多角形を描画するプログラムは次の通りです。
# 多角形の描画
pts = np.array([[10,5],[120,30],[170,120],[50,110]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img, [pts], True, (0, 255, 0), 5)
多角形の描画にはcv2.polylines()を使います。
img = cv.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])
img: イメージ
pts: 多角形曲線の配列
isClosed: ポリラインが閉じているかどうか
color: 色または明るさ(グレースケールイメージ)
thickness: ラインの太さ(マイナスは塗り潰し)
lineType: ラインの種別
cv.FILLED: 塗り潰し
cv.LINE_4: 4-connected
cv.LINE_8: 8-connected
cv.LINE_AA: アンチエイリアス
shift: 頂点の小数ビットの数
7. テキスト
テキストを描画するプログラムは次の通りです。
# テキストの描画
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OpenCV', (10,50), font, 1, (255, 0, 0), 1, cv2.LINE_AA)
テキストの描画にはcv2.putText()を使います。
img = cv.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
img: イメージ
text: テキスト
org: テキストの左下隅の座標
fontFace: フォント種別
cv.FONT_HERSHEY_SIMPLEX: 通常サイズのSans-Serif
cv.FONT_HERSHEY_PLAIN: 小サイズのSans-Serif
cv.FONT_HERSHEY_DUPLEX: 通常サイズのSans-Serif(FONT_HERSHEY_SIMPLEXより複雑)
cv.FONT_HERSHEY_COMPLEX: 通常サイズのSerif
cv.FONT_HERSHEY_TRIPLEX: 通常サイズのSerif(FONT_HERSHEY_COMPLEXより複雑)
cv.FONT_HERSHEY_COMPLEX_SMALL: 小サイズのSerif
cv.FONT_HERSHEY_SCRIPT_SIMPLEX: 手書き文字
cv.FONT_HERSHEY_SCRIPT_COMPLEX: 手書き文字(FONT_HERSHEY_SCRIPT_SIMPLEXより複雑)
cv.FONT_ITALIC: イタリック
fontScale: フォントスケール(基本サイズを乗算)
color: 色
thickness: ライン太さ
lineType: ラインの種別
cv.FILLED: 塗り潰し
cv.LINE_4: 4-connected
cv.LINE_8: 8-connected
cv.LINE_AA: アンチエイリアス
bottomLeftOrigin: true時はイメージの原点は左下隅、False時は左上隅
次回
この記事が気に入ったらサポートをしてみませんか?