LoginSignup
3
2

More than 1 year has passed since last update.

ぷよぷよの画像からぷよぷよを抽出する

Posted at

ぷよぷよの画面から何色のぷよぷよを抽出する

使いたい人がいるかもしれないのでコードの共有が目的
抽出した上でやることは秘密だが、この記事とコードでできることは

プレイ画像(動画) -> 配置されているぷよぷよのnumpy配列(横6×縦12×色)のplayer数分

github

https://github.com/daikiclimate/PuyoExtractor
細かいところはこれからリファクタリング。
実装途中なので細かい修正はあるかも
基本的にはこのまま使うことはあまり考えていない。使う動画や画像に合わせて修正してほしい

 結果

入力
sample.jpg
プレイヤー1
player1_img.jpg
プレイヤー2
player2_img.jpg

大体あってそうですね
みどりぷよのテンプレートを適当に選んじゃったからいつも横と繋がっているみたいになっちゃってますねw

実装の工夫

こんなぷよの分類如きに機械学習は使えないのでルールベースでノイズに強いうまく行く方法を考えた。

 色の分類

当初はテンプレート画像との差分でいけるという話があったが、あまり頑健でなかった。
というより差分画像だとピクセル単位の位置ずれが起きた時にがっつり数字が変わってしまうので少し扱いづらかった気がする

そこで、画像をHSV空間に変換し、色をHで表現してから、cv2のcalcHistとcompareHistを使うことで、Hueをヒストグラム化して色を分類します。

上記の方法でタチが悪かったのが、背景。
背景は一定かと思いきや、実はキャラクターが書かれているんですね。

スクリーンショット 2021-09-22 23.38.48.png

背景にバッチリアミティがいますね。この背景がなんとなく色相を持っていることでたまに誤りが発生します。

どうしようかと思いましたが、背景は色合いは確実に薄いのでHSVのSaturationの薄いのではと思いましたが、背景はSaturationで閾値を切れでした。
ということで、背景だけSaturationで分けています。

×の抽出

ぷよが出てくる位置に×があって、しかもこのバツくるくる回るんですよね。テンプレートマッチングだと検出できないし、色だと赤ぷよとかぶるのでどうしたもんかと。今回はこの下にぷよがなければとりあえず空白になることになっていますが、後半のバツの下にぷよがある様なシーンではバグ実装になってます。仕方ない

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2