私は開いているcvでトランプカードを認識しようとしていますが、いくつか問題があります。まず、私は色(心、ダイヤモンド、スペード、クラブ)を認識したいと思います。私は赤い色を見つめていた。だから私は色を検出し、ダイヤモンドや心臓をカットして、分別して認識しようとする - 私は良い一致を選択し、より多くを持っている色を一致させる(私はその馬鹿だと確信していますが、私は次のように1のような結果を得る:SIFTメソッドは4つの図形を認識して悪い結果を出します
これは私のmatch関数のコードです:
def match(img, models):
goods = []
for name, value in models:
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(name, None)
kp2, des2 = sift.detectAndCompute(img, None)
if des1 is None or des2 is None:
continue
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)
good = []
if matches is None:
continue
for m, n in matches:
if m.distance < 0.75 * n.distance:
good.append([m])
img3 = cv2.drawMatchesKnn(img, kp1, name, kp2, good, None, flags=2)
plt.imshow(img3), plt.show()
goods.append([len(good), value])
maxi = 0
ret = None
for l, v in goods:
if l > maxi:
maxi = l
ret = v
if maxi < 3:
return 0
return ret
何かヒントを持っている場合、私は感謝するでしょう。
色の検出と作物が成功したので、ダイヤモンドか心臓かを分類するのは難しいですか? – ebeneditos
はい、私はびっくりで問題があります – heheszki
SIFTは形状を分類する際に強調しません、それは主に与えられた画像の特徴を分類/マッチングするために使用されるローカルinvarient記述子です。形状検出のために輪郭を取得し、色関連のもの。 –