始める無料で始める

サイコロ画像のドットを数える

輪郭が見つかったので、そこから情報を取り出していきます。

前の演習では、紫色のサイコロ画像から輪郭を検出できるよう前処理しました。

輪郭検出の手順を示す3枚の画像

今回は、画像内のドットの数を数えて、サイコロの出目を判定します。

前の演習で検出した輪郭は contours として読み込まれています。

すべての輪郭の形状をリストにした shape_contours を作成してください。作成後にコンソールで shape_contours を表示すると、各輪郭の形状を確認できます。

ほとんどの輪郭がサイズ 50 を超えないことを確認してください。これらを数えると、画像内のドットの数と一致します。

show_image_contour(image, contours) は、Matplotlib を使って検出したすべての輪郭付き画像を表示する、あらかじめ用意された関数です。

この演習はコースの一部です

Pythonで学ぶ画像処理

コースを見る

演習の手順

  • shape_contours を、contours のすべての輪郭の形状からなるリストにします。
  • max_dots_shape を 50 に設定します。
  • 輪郭の形状に対する条件として、ドットの最大形状サイズ max_dots_shape を用います。
  • サイコロの出目を出力します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Create list with the shape of each contour
shape_contours = [cnt.shape[0] for cnt in ____]

# Set 50 as the maximum size of the dots shape
max_dots_shape = ____

# Count dots in contours excluding bigger than dots size
dots_contours = [cnt for cnt in contours if np.shape(cnt)[0] < ____]

# Shows all contours found 
show_image_contour(binary, contours)

# Print the dice's number
print("Dice's dots number: {}. ".format(len(____)))
コードを編集して実行