###前提・実現したいこと
pythonで二値画像のラベリングを行い、一番面積の大きいラベル以外を黒く塗りつぶしたいのですが、方法が分からず困っています。
画像の真ん中の白い部分だけを残したいです。
よろしくお願いします。
###発生している問題・エラーメッセージ
ラベル付けは出来たのですが、そこから面積の小さいものを塗ることが出来ません。
###該当のソースコード
Python3.4.3
1from PIL import Image 2import numpy as np 3from matplotlib import pylab as plt 4import sys 5import cv2 6from PIL import ImageOps 7 8 9param = sys.argv 10kernel = np.ones((5,5),np.uint8) 11 12src = np.array(Image.open("%s.jpg"%param[1]).convert("L")) 13ret,ans_d = cv2.threshold(src,105, 255, cv2.THRESH_BINARY) 14ans_d[900:1071,800:1071]=0 15dst = cv2.morphologyEx(ans_d, cv2.MORPH_OPEN, kernel) 16#dst = cv2.morphologyEx(dst, cv2.MORPH_CLOSE, kernel) 17label = cv2.connectedComponentsWithStats(dst) 18n=label[0] - 1 19data = np.delete(label[2],0,0) 20center = np.delete(label[3],0,0) 21
###試したこと
dataの中身を見ると、以下のものが表示され9番目のラベルが面積が大きいことは分かるのですが…
array([[ 446, 18, 65, 25, 1078],
[ 606, 23, 30, 16, 244],
[ 339, 29, 132, 52, 2583],
[ 650, 29, 47, 39, 1088],
[ 611, 33, 52, 24, 660],
[ 711, 46, 20, 29, 380],
[ 288, 57, 61, 50, 1246],
[ 733, 62, 37, 42, 1027],
[ 146, 79, 843, 720, 463271],
[ 789, 81, 220, 334, 13896],
[ 472, 84, 12, 7, 79],
[ 243, 98, 32, 30, 601],
[ 264, 126, 11, 9, 72],
[ 207, 133, 32, 34, 596],
[ 223, 144, 28, 24, 289],
[ 186, 173, 7, 7, 47],
[ 209, 173, 15, 14, 147],
[ 166, 187, 21, 24, 235],
[ 178, 195, 20, 21, 269],
[ 152, 227, 22, 26, 276],
[ 142, 258, 6, 7, 40],
[ 871, 715, 43, 55, 663],
[ 252, 717, 121, 69, 1722],
[ 780, 771, 100, 86, 1566]], dtype=int32)

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。