Python + OpenCV4プログラミングの学習(3)〜グラフィックス〜
本記事はOpenCVによるグラフィックスを行ったときの備忘録である。
事前準備
以下の記事で仮想環境opencvEnvを構築していることを前提とする。 kawakeee.hatenablog.com
円を描く
以下のコードを写経しcircle.pyのファイルを作成。
import numpy as np import cv2 # 画像データ(400×400 px)の生成 img = np.zeros((400, 400, 3), np.uint8) # 円の描写 (対象画像データ, 中心座標, 半径, 色情報, 円の太さ) cv2.circle(img, (200, 200), 50, (255, 0, 0) ,1) cv2.imwrite('img/circle1.jpg', img) cv2.imshow('img1', img) img = np.zeros((400, 400, 3), np.uint8) # 半径 色 太さ を変更 cv2.circle(img, (200, 200), 100, (0, 255, 0) ,3) cv2.imwrite('img/circle2.jpg', img) cv2.imshow('img2', img) img = np.zeros((400, 400, 3), np.uint8) # 半径 色 太さ を変更 cv2.circle(img, (200, 200), 150, (0, 0, 255) ,-1) cv2.imwrite('img/circle3.jpg', img) cv2.imshow('img3', img) cv2.waitKey(0) cv2.destroyAllWindows()
- cv2.circle(...):円の描写
使用例:cv2.circle(img, (200, 200), 50, (255, 0, 0) ,1)
引数は、順に(対象画像データ, 中心座標, 半径, 色情報, 円の太さ)を表す。
cv2.waitKey(0)
によってキーが押されるまで以降のコードは実行されない。何かのキーが押されるとcv2.destroyAllWindows()
で全てのウィンドウが閉じられてプログラムが終了する。
実行確認
(opencvEnv)$ python circle.py
指定フォルダ配下に画像が生成されていることを確認。
また、cv2.imshow
によってウィンドウで画像が表示される事を確認。
線を描く
次に、任意の画像に対して線を描く。今回はLenna.jpgを用意した。
以下のコードを写経しlines_on_image.pyのファイルを作成。
import cv2 try: img = cv2.imread('img/Lenna.jpg') if img is None: print('ファイルを読み込めません') import sys sys.exit() # 画像に対して線を描く (対象画像, 始点, 終点, 色) cv2.line(img, (50, 50), (200, 50), (255, 0, 0)) # 追加して太さも指定 cv2.line(img, (50, 100), (200, 100), (0, 255, 0), 5) cv2.imwrite('img/LinesOnImage.jpg', img) cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows() except: import sys print("Error:", sys.exc_info()[0]) print(sys.exc_info()[1]) import traceback print(traceback.format_tb(sys.exc_info()[2]))
- cv2.line(...):線の描写
使用例:cv2.line(img, (50, 50), (200, 50), (255, 0, 0)) 引数は、順に(対象画像, 始点, 終点, 色)を表す。
実行結果
(opencvEnv)$ python lines_on_image.py
指定フォルダ配下にLinesOnImage.jpg生成され、線が描写された画像がウィンドウに表示される事を確認。
画像上に円を描く
次に、Lenna.jpgに対して円を描く。 以下のコードを写経しcircles_on_image.pyのファイルを作成。
import cv2 try: img = cv2.imread('img/Lenna.jpg') if img is None: print('ファイルを読み込めません') import sys sys.exit() # 画像に対して円を描く cv2.circle(img, (50, 50), 40, (0, 255, 0), 2) cv2.circle(img, (150, 150), 80, (255, 255, 0), 6) cv2.circle(img, (200, 200), 50, (0, 255, 255), -1) cv2.imwrite('img/CirclesOnImage.jpg', img) cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows() except: import sys print("Error:", sys.exc_info()[0]) print(sys.exc_info()[1]) import traceback print(traceback.format_tb(sys.exc_info()[2]))
円・線の描写で学んだ関数を使用し画像上に3つの円を描くよう記述。
実行結果
(opencvEnv)$ python circles_on_image.py
指定フォルダ配下にCirclesOnImage.jpg生成され、円が描写された画像がウィンドウに表示される事を確認。
画像上に文字を描く
次に、Lenna.jpgに対して文字を描く。
以下のコードを写経しdraw_text.pyのファイルを作成。
import cv2 try: img = cv2.imread('img/Lenna.jpg') if img is None: print('ファイルを読み込めません') import sys sys.exit() # 画像に対して文字を描く cv2.putText(img, 'Hello OpenCV', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (150, 60, 80), 2) cv2.imwrite('img/puttext.jpg', img) cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows() except: import sys print("Error:", sys.exc_info()[0]) print(sys.exc_info()[1]) import traceback print(traceback.format_tb(sys.exc_info()[2]))
- cv2.putText(...):文字の描写
使用例:cv2.putText(img, 'Hello OpenCV', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (150, 60, 80), 2) 引数は、順に(対象画像,文字列,表示位置, フォント,サイズ,色,太さ)を表す。
実行結果
(opencvEnv)$ python draw_text.py
指定フォルダ配下にputtext.jpg生成され、文字が描写された画像がウィンドウに表示される事を確認。
まとめ
- cv2.circle(...):円の描写
- cv2.line(...):線の描写
- cv2.putText(...):文字の描写