PythonとOpenCVで画像処理③【描画処理】
*OpenCVのバージョンは2.4.1です
【元の画像】
*Raspberry Piのカメラで撮影したのでサイズが大きめです
【線分】
- line関数を使えば線を引くことができる
- cv2.line(画像, 始点座標, 終点座標, 色, 線の太さ)
# -*- coding: utf-8 -*- import cv2 # 画像の読み込み img = cv2.imread("test.jpg", 1) # 画像の高さ、幅を取得 height = img.shape[0] width = img.shape[1] # 左上から右下まで、太さ10の赤い線を引く cv2.line(img, (0, 0), (width-1, height-1), (0, 0, 255), 10) # 右上から左下まで、太さ50の青い線を引く cv2.line(img, (width-1, 0), (0, height-1), (255, 0, 0), 50) # 画像を表示 cv2.namedWindow("img", cv2.WINDOW_NORMAL) cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()
【線分 処理結果】
【四角形】
- rectangle関数を使えば四角形を描くことができる
- cv2.rectangle(画像, 左上座標, 右下座標, 色, 線の太さ)
- 線の太さを -1 にすると指定した色で塗りつぶされる
# -*- coding: utf-8 -*- import cv2 # 画像の読み込み img = cv2.imread("test.jpg", 1) # 画像の高さ、幅を取得 height = img.shape[0] width = img.shape[1] # 左上から中央まで、太さ50の赤い四角形を描く cv2.rectangle(img, (0, 0), (width/2, height/2), (0, 0, 255), 50) # 中央から右下まで、青で塗りつぶされた四角形を描く cv2.rectangle(img, (width/2, height/2), (width-1, height-1), (255, 0, 0), -1) # 画像を表示 cv2.namedWindow("img", cv2.WINDOW_NORMAL) cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()
【四角形 処理結果】
【円形】
- circle関数を使えば円形を描くことができる
- cv2.circle(画像, 中心座標, 半径, 色, 線の太さ)
- 線の太さを -1 にすると指定した色で塗りつぶされる
# -*- coding: utf-8 -*- import cv2 # 画像の読み込み img = cv2.imread("test.jpg", 1) # 画像の高さ、幅を取得 height = img.shape[0] width = img.shape[1] # 中央左寄りに、太さ10の赤い円形を描く cv2.circle(img, (width/2-200, height/2), 100, (0, 0, 255), 10) # 中央右寄りに、青で塗りつぶされた円形を描く cv2.circle(img, (width/2+200, height/2), 100, (255, 0, 0), -1) # 画像を表示 cv2.namedWindow("img", cv2.WINDOW_NORMAL) cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()
【円形 処理結果】
【楕円形、円弧】
- ellipse関数を使えば楕円形や円弧を描くことができる
- cv2.ellipse(画像, 中央座標, 長短軸, 回転角度, 円弧開始角度, 円弧終了角度, 色, 線の太さ)
- 線の太さを -1 にすると指定した色で塗りつぶされる
# -*- coding: utf-8 -*- import cv2 # 画像の読み込み img = cv2.imread("test.jpg", 1) # 画像の高さ、幅を取得 height = img.shape[0] width = img.shape[1] # 左上 赤い横長楕円形 cv2.ellipse(img, (width/2-200, height/2-300), (100, 50), 0, 0, 360, (0, 0, 255), 10) # 右上 青い縦長楕円形 cv2.ellipse(img, (width/2+200, height/2-300), (50, 100), 0, 0, 360, (255, 0, 0), -1) # 中央左 緑の横長円弧 cv2.ellipse(img, (width/2-200, height/2), (100, 50), 0, 0, 300, (0, 255, 0), 10) # 中央右 水色の縦長円弧 cv2.ellipse(img, (width/2+200, height/2), (50, 100), 0, 0, 300, (255, 255, 0), -1) # 左下 ピンクの横長円弧(回転角度60) cv2.ellipse(img, (width/2-200, height/2+300), (100, 50), 30, 60, 300, (255, 0, 255), 10) # 右下 黄色の縦長円弧(回転角度60) cv2.ellipse(img, (width/2+200, height/2+300), (50, 100), 30, 60, 300, (0, 255, 255), -1) # 画像を表示 cv2.namedWindow("img", cv2.WINDOW_NORMAL) cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()
【楕円形、円弧 処理結果】
【文字】
- putText関数を使えば文字を書くことができる
- cv2.putText(画像, 文字, 左下座標, フォント, 文字の大きさ, 色, 文字の太さ, 線の種類)
- 線の種類を cv2.CV_AA にするとアンチエイリアスがかかる
# -*- coding: utf-8 -*- import cv2 # 画像の読み込み img = cv2.imread("test.jpg", 1) # 画像の高さ、幅を取得 height = img.shape[0] width = img.shape[1] # フォント指定 fontType = cv2.FONT_HERSHEY_SIMPLEX # 中央にテキスト描く cv2.putText(img, "SAMPLE_TEXT", (width/4, height/2), fontType, 7, (0, 0, 255), 3, cv2.CV_AA) # 画像を表示 cv2.namedWindow("img", cv2.WINDOW_NORMAL) cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()
【文字 処理結果】
【参考】
Drawing Functions in OpenCV — OpenCV-Python Tutorials 1 documentation
描画処理 — OpenCV-CookBook
曲線と形状の描画 | OpenCV プログラミング解説