def detect(img, seed):
seed = (seed[1], seed[0])
shape = get_size(img)
[Ms, Ml, Mshadow] = [np.zeros(shape, dtype=np.uint8) for i in range(3)]
tmp = np.array(img)
for i in range(DOWNSAMPLE):
img_ds = downsample(tmp)
tmp = img_ds
seed_ds = (int(seed[0]*RATE**DOWNSAMPLE), int(seed[1]*RATE**DOWNSAMPLE))
seed_pixel = img_ds[seed_ds]
shape_ds = (int(shape[0]*RATE**DOWNSAMPLE), int(shape[1]*RATE**DOWNSAMPLE))
edges = cv2.Canny(cv2.GaussianBlur(img, (3, 3), 0), CANNY[0], CANNY[1])
seed_mask_ds = np.zeros(get_size(img_ds))
seed_mask_ds[seed_ds] = 1
vis = np.zeros(get_size(img_ds))
directions = ((1, 0), (0, 1), (-1, 0), (0, -1))
def search(point, seed_pixel):
if point[0] < 0 or point[1] < 0 or point[0] >= shape_ds[0] or point[1] >= shape_ds[1]:
return
if vis[point]:
return
elif edges[point]:
return
elif(dist(img_ds[point], seed_pixel) < COL_SEED):
vis[point] = 1
seed_mask_ds[point] = 1
for i in range(4):
search((point[0]+directions[i][0], point[1]+directions[i][1]), seed_pixel)
for i in range(SEED_ITER):
search(seed_ds, seed_pixel)
seed_pixel = np.mean(np.mean(img_ds[np.where(seed_mask_ds == 1)], axis = 0), axis = 0)
return seed_ds
评论列表
文章目录