画像に基本図形を書き込む方法

OpenCV では、linerectanglecircleellipse などのメソッドを利用して、線形、矩形、円形や楕円形などを画像に書き込むことができる。

線形

直線を描くには、OpenCV の line メソッドを利用し、始点の座標、終点の座標、色、太さ、線のタイプの順でパラメーターを与える。

import cv2 as cv

img = cv.imread('sample.jpg')
img = cv.line(img, (0,  50), (200,  50), (255, 0, 0), 5, 4)
img = cv.line(img, (0, 100), (200, 100), (0, 255, 0), 5, 8)
img = cv.line(img, (0, 150), (200, 150), (0, 0, 255), 5, cv.LINE_AA)
cv.imwrite('opencv-line-01.jpg', img)
処理前処理後
線形
線形

矩形

矩形を描くには、OpenCV の rectangle メソッドを利用し、左上の角の座標、右下の角の座標、色、枠線の太さ、枠線のタイプの順でパラメーターを与える。枠線の太さに -1 を指定すると、矩形は塗りつぶされる。

import cv2 as cv

img = cv.imread('sample.jpg')
img = cv.rectangle(img, (10,   50), (50,  150), (255, 0, 0), 3, 4)
img = cv.rectangle(img, (110, 50), (150, 150), (0, 255, 0), 5, 8)
img = cv.rectangle(img, (210, 50), (250, 150), (0, 0, 255), -1, cv.LINE_AA)
cv.imwrite('opencv-rectangle-01.jpg', img)
処理前処理後
線形
線形

円形

円形を描くには、OpenCV の circle メソッドを利用し、円の中心座標、半径、色、枠線の太さ、枠線のタイプの順でパラメーターを与える。枠線の太さに -1 を指定すると、円形は塗りつぶされる。

import cv2 as cv

img = cv.imread('sample.jpg')
img = cv.circle(img, ( 50,  50), 20, (225, 0, 0), 3, 4)
img = cv.circle(img, (100, 100), 40, (0, 255, 0), 5, 8)
img = cv.circle(img, (150, 150), 60, (0, 0, 255), -1, cv.LINE_AA)
cv.imwrite('opencv-circle-01.jpg', img)
処理前処理後
線形
線形

楕円形

楕円を描くには、OpenCV の elipse メソッドを利用し、楕円の中心座標、楕円の長径と短径、楕円の回転角度、描画開始点の角度、描画終了点の角度、枠線の太さ、枠線のタイプの順でパラメーターを与える。枠線の太さに -1 を指定すると、楕円は塗りつぶされる。

import cv2 as cv

img = cv.imread('sample.jpg')
img = cv.ellipse(img, ( 50, 100), (20, 10),  0, 0, 360, (255, 0, 0), -1, 4)
img = cv.ellipse(img, (150, 100), (40, 10), 10, 0, 180, (0, 255, 0), 3, 8)
img = cv.ellipse(img, (250, 100), (10, 40), 30, 0, 270, (0, 0, 255), 5, cv.LINE_AA)
cv.imwrite('opencv-elipse-01.jpg', img)
処理前処理後
線形
線形

多角形

多角形を描くには、OpenCV の polylines メソッドを利用し、座標、線を閉じるかどうか、枠線の色、枠線の太さの順でパラメーターを与える。

import cv2 as cv
import numpy as np

img = cv.imread('sample.jpg')
pts = np.array([[5, 5], [5, 100], [280, 100], [280, 50], [120, 50]], np.int32)
pts = pts.reshape((-1, 1, 2))
img = cv.polylines(img, [pts], True, (0, 0, 255), 5)
cv.imwrite('opencv-polylines-01.jpg', img)
処理前処理後
線形
線形