GOTOキャンペーンと言うことで
各都道府県の標章の中で
ケツに入れたら痛そうな奴を
プログラムで探してみました。
解説動画はこちら
まずは画像ですが
県章一覧
この画像を使ってみます。

これが県の標章だそうです。
そんなものがあるとは知りませんでしたが
これをケツに入れるには
ケツの穴の大きさが間に合わないので
仮想で考えます。
どうやってケツに入れたら
痛いかどうかを考えればよいでしょうか?
画像の輪郭から角度を求めてあげて
その角度が少ないやつが痛そうですよね。
と言うわけで
この画像を縦横で切り分けて保存しました。
(6x8画像)
1県ずつ
輪郭を求めてみます。
輪郭を求めるコードは次の通りで
opencvを用いています。

こんな形で輪郭が抽出されます。
findContoursで輪郭を求めることが出来ます。
輪郭を描画するには各点の座標がなければ
出来ないので、複数の座標が取得できています。
あとは3点があれば角度の計算ができますよね。

角度を求めて、その平均を各県で計算します。
次のようなコードで角度の計算をしています。
さて
これで全県の県章の
平均角度が求まりました。
あとはこれのいっちゃんちっさい奴が
ケツに入れたら痛い奴のはずです。
結果は・・・

デーーん
第一回
ケツに入れたら痛そうな県章選手権の覇者は
千葉県に決まりました!!!!!
千葉県人として
誇り高いですねーーー
素晴らしい
森田さーーん
見てますかーーwwww
と言うわけで
無事、千葉県が
ケツに入れたら痛いそうでした。
今回はこれまでです。
それでは。
各都道府県の標章の中で
ケツに入れたら痛そうな奴を
プログラムで探してみました。
解説動画はこちら
まずは画像ですが
県章一覧
この画像を使ってみます。

これが県の標章だそうです。
そんなものがあるとは知りませんでしたが
これをケツに入れるには
ケツの穴の大きさが間に合わないので
仮想で考えます。
どうやってケツに入れたら
痛いかどうかを考えればよいでしょうか?
画像の輪郭から角度を求めてあげて
その角度が少ないやつが痛そうですよね。
と言うわけで
この画像を縦横で切り分けて保存しました。
(6x8画像)
1県ずつ
輪郭を求めてみます。
輪郭を求めるコードは次の通りで
opencvを用いています。
%matplotlib inline import cv2 import numpy as np import matplotlib.pyplot as plt file_path = 'img/5_7.png' img = cv2.imread(file_path) # 領域抽出 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) _, binarized = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) contours, _ = cv2.findContours(binarized, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 領域描画 line_color , line_size = (0, 255, 0),1 plt.figure(figsize=(16,9)) cv2.drawContours(img, contours, -1, line_color , line_size) plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show()

こんな形で輪郭が抽出されます。
findContoursで輪郭を求めることが出来ます。
輪郭を描画するには各点の座標がなければ
出来ないので、複数の座標が取得できています。
あとは3点があれば角度の計算ができますよね。

角度を求めて、その平均を各県で計算します。
次のようなコードで角度の計算をしています。
res = {}
for x in range(6):
for y in range(8):
file_path = 'img/{0}_{1}.png'.format(x,y)
img = cv2.imread(file_path)
img = img[10:140,10:145]
# 領域抽出
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, binarized = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
contours, _ = cv2.findContours(binarized, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
tmp = []
for i in range(len(contours[0])-2):
a,b,c = contours[0][i][0],contours[0][i+1][0],contours[0][i+2][0]
ba = [abs(a[0]-b[0]),abs(a[1]-b[1])]
bc = [abs(c[0]-b[0]),abs(c[1]-b[1])]
cos_s = (ba[0]*bc[0] + ba[1]*bc[1]) / (np.sqrt(ba[0]**2 + bc[0]**2) * np.sqrt(ba[1]**2 + bc[1]**2))
dig = np.degrees(np.arccos(cos_s))
if dig>5:
tmp.append(dig)
if not np.isnan(np.mean(tmp)):
res[file_path]=np.mean(tmp)さて
これで全県の県章の
平均角度が求まりました。
あとはこれのいっちゃんちっさい奴が
ケツに入れたら痛い奴のはずです。
結果は・・・

デーーん
第一回
ケツに入れたら痛そうな県章選手権の覇者は
千葉県に決まりました!!!!!
千葉県人として
誇り高いですねーーー
素晴らしい
森田さーーん
見てますかーーwwww
と言うわけで
無事、千葉県が
ケツに入れたら痛いそうでした。
今回はこれまでです。
それでは。

コメントする