しぐれの戯言箱

技術的なメモ書き、ポケモンの調整記事、ソシャゲ奮闘記…etc

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()

実行結果

f:id:shiguderika:20191120165508j:plain
図1:元画像



f:id:shiguderika:20191120165024j:plain
図2:グレースケール化したもの



f:id:shiguderika:20191120165041p:plain
図3:四角形と認識したものに輪郭線を引いたもの


終わりに

余計なところも四角形として認識されていますが、とりあえずナンバープレートに輪郭線が入っているためまあ良しとしましょう。

次は四角形認識された所にモザイクを入れる処理を入れたいですね。