python : Opencv 四角、線、円、楕円の描画

pythonOpencvを使って

四角、線、円、楕円の書き方です。

 

いつも通り、Opencvのインポートをします。

import cv2

後、書き込む画像を作るためにnumpyを使うので

import numpy as np

 

まずは、四角の書き方は

cv2.rectangle(描画する画像、(座標1点目x,y),(座標2点目x,y),(色BGR),線の太さ

※線の太さで-1にすると塗りつぶしです。
cv2.rectangle(img, (10, 10), (110, 110), (0, 255, 0), thickness=1)
cv2.rectangle(img, (10, 120), (110, 220), (255, 0, 0), thickness=-1)

f:id:Kangkang1981:20200318205135j:plain

 

次は線、書き方は

cv2.line(描画する画像、(始点の座標x,y),(終点の座標x,y),(色BGR),線の太さです)

cv2.line(img, (120, 10), (220, 110), (255, 255, 255), thickness=1)

 

f:id:Kangkang1981:20200318205441j:plain

 

次は円、記述方法は

cv2.circle(描画する画像、(中心座標x,y),半径,(色BGR)、線の太さ)
cv2.circle(img, (300,60), 50, (0,0,255), thickness=5)
cv2.circle(img, (300,170), 50, (0,0,255), thickness=-1)

 

f:id:Kangkang1981:20200318205659j:plain

 

最後に楕円の書き方

cv2.ellipse(描画する画像,((中心の座標x,y),(x,yの各々の半径),

円の角度、色(BGR)、線のふとおさ)

 

#楕円、描画する画像を指定、座標(x,y),xyの半径、角度,色、線の太さ(-1は塗りつぶし)
cv2.ellipse(img, ((400, 60), (10, 50), 0), (255, 255, 255),thickness=1)
cv2.ellipse(img, ((400, 170), (50, 50), 0), (255, 255, 255),thickness=-1)
cv2.ellipse(img, ((500, 60), (50, 10), 0), (255, 255, 255),thickness=1)
cv2.ellipse(img, ((500, 170), (50, 10), 30), (255, 255, 255),thickness=-1)

 

f:id:Kangkang1981:20200318205914j:plain

プログラムは下記です。

import cv2
import numpy as np

images = []

#描画する画像を作る,128を変えると色を変えれます 0黒→255白
img = np.full((250, 600, 3), 128, dtype=np.uint8)
images.append(img)

#長方形,描画する画像,座標1点目、座標2点目、色、線の太さ(-1は塗りつぶし)
cv2.rectangle(img, (10, 10), (110, 110), (0, 255, 0), thickness=1)
cv2.rectangle(img, (10, 120), (110, 220), (255, 0, 0), thickness=-1)
images.append(img)

#線、描画する画像を指定、座標1点目、2点目、色、線の太さ
cv2.line(img, (120, 10), (220, 110), (255, 255, 255), thickness=1)
images.append(img)

#円、描画する画像を指定、座標(x,y),半径、色、線の太さ(-1は塗りつぶし)
cv2.circle(img, (300,60), 50, (0,0,255), thickness=5)
cv2.circle(img, (300,170), 50, (0,0,255), thickness=-1)
images.append(img)

#楕円、描画する画像を指定、座標(x,y),xyの半径、角度,色、線の太さ(-1は塗りつぶし)
cv2.ellipse(img, ((400, 60), (10, 50), 0), (255, 255, 255),thickness=1)
cv2.ellipse(img, ((400, 170), (50, 50), 0), (255, 255, 255),thickness=-1)
cv2.ellipse(img, ((500, 60), (50, 10), 0), (255, 255, 255),thickness=1)
cv2.ellipse(img, ((500, 170), (50, 10), 30), (255, 255, 255),thickness=-1)
images.append(img)

#cv2.imshow('img',img)
#cv2.imwrite('form.jpg',img)
images[0].save('output.gif',save_all=True, append_images=images[1:], optimize=False, duration=40, loop=0)

#キー入力を待つ
cv2.waitKey(0)
#全ての開いたウインドウ閉じる
cv2.destroyAllWindows()

 

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。