python画像処理日記【四角形の認識】
はじめに
こんにちは。しぐれです。
前回の輪郭線の描写を使って、図形(四角形)の認識を行うものを作成しました。
(認識率はさておき)とりあえず形になるものができたので、ソースコードを掲載しておきます。
ソースコード
mport cv2 import numpy as np from PIL import Image import matplotlib.pyplot as plt #%matplotlib inline #イメージファイルを読み込み img = cv2.imread("a.jpg",cv2.IMREAD_GRAYSCALE) #しきい値指定によるフィルタリング ret,threshold = cv2.threshold(img,140,255,cv2.THRESH_BINARY) cv2.imwrite('thresha.jpg',threshold) cv2.imshow('thresha.jpg',threshold) #輪郭を抽出 contours,hierarchy = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) font = cv2.FONT_HERSHEY_DUPLEX #図形の変数 rectangle = 0 #図形の設定 for cnt in contours: approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True) cv2.drawContours(img, [approx],0,(0),2) x = approx.ravel()[0] y = approx.ravel()[1] if len(approx) == 4: rectangle += 1 cv2.putText(img, "rectangle{}".format(rectangle),(x,y),font,0.8,(0)) cv2.imwrite('output_shapes.png',img) cv2.imshow('output_shapes.png',img) cv2.waitKey(0) cv2.destroyAllWindows()
実行結果
図1:元画像
図2:グレースケール化したもの
図3:四角形と認識したものに輪郭線を引いたもの
終わりに
余計なところも四角形として認識されていますが、とりあえずナンバープレートに輪郭線が入っているためまあ良しとしましょう。
次は四角形認識された所にモザイクを入れる処理を入れたいですね。