実現したいこと
python初心者です。
ポケモンの画像の複雑さを数値化したいと思っています。
丸みを帯びていれば数値が小さく、凹凸が多いポケモンは数値が大きくなるようにしたいです。
前提
現在輪郭を抽出し、複雑さを数値化するコードを作成してみましたが、
丸みを帯びているポケモンの方が、凹凸の多いポケモンよりも数値が高くなってしまいました。
該当のソースコード
以下のコードが現在作ってみたコードです。
python
1import cv2 2import numpy as np 3from scipy.spatial import ConvexHull 4 5# 画像の読み込み 6image = cv2.imread("pokemon_img/0039.png") 7 8# グレースケールに変換 9gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 10 11# 白黒反転 12gray = 255 - gray 13 14#パラメータ調整 15blur = cv2.GaussianBlur(gray, (5, 5), 0) 16 17 18# 2値化 19#ret, thresh = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY) 20 21#パラーメータ調整 22ret, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) 23 24 25# 輪郭の抽出 26contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 27 28# 輪郭の複雑さを数値化 29complexity = 0 30for contour in contours: 31 # 輪郭の凸包を計算 32 hull = ConvexHull(contour.reshape(-1, 2)) 33 34 # 凸包の頂点数を取得 35 vertex_count = hull.vertices.shape[0] 36 37 # 複雑さを加算 38 complexity += vertex_count 39 40print("輪郭の複雑さ:", complexity) 41 42
補足情報(FW/ツールのバージョンなど)
上記のコードは輪郭を抽出したのち、以下の手順で複雑さを数値化しました。
- 'complexity = 0' で複雑さを初期化する変数を作成。
- 'hull = ConvexHull(contour, reshape(-1,-2))' で凸包の数を計算。
- 'vertex_count = hull.vertices.shape[0]' で凸包の頂点の数を計算。
- 'complexity += vertex_count' で複雑さを加算。
なお今回のコードで使用したポケモンの画像は公式のポケモンずかんの画像から取得しています。

回答3件
あなたの回答
tips
プレビュー