| import cv2 |
| from os.path import join |
| import os |
| import numpy as np |
| from tqdm import tqdm |
|
|
| dir = './datasets/Open_Images/' |
| mode = 'test' |
|
|
| image_dir = join(dir, 'images', mode) |
| seg_dir = join(dir, 'segs', mode) |
|
|
| files = os.listdir(seg_dir) |
|
|
| data_dict = {} |
|
|
| for file in tqdm(files): |
| seg_path = join(seg_dir, file) |
| image_path = join(image_dir, file.split('_')[0] + '.jpg') |
| seg = cv2.imread(seg_path) |
| image = cv2.imread(image_path) |
| seg = cv2.resize(seg, (image.shape[1], image.shape[0]), interpolation=cv2.INTER_NEAREST) |
|
|
| seg = seg[:, :, 0] |
|
|
| |
| contours = cv2.findContours(seg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) |
| contours = contours[0] if len(contours) == 2 else contours[1] |
|
|
| if len(contours) > 1: |
| cntr = np.vstack(contours) |
| elif len(contours) == 1: |
| cntr = contours[0] |
| else: |
| continue |
|
|
| if len(cntr) < 2: |
| continue |
|
|
| hs, he = np.min(cntr[:, :, 1]), np.max(cntr[:, :, 1]) |
| ws, we = np.min(cntr[:, :, 0]), np.max(cntr[:, :, 0]) |
|
|
| h, w = seg.shape |
|
|
| if (he - hs) % 2 == 1 and (he + 1) <= h: |
| he = he + 1 |
| if (he - hs) % 2 == 1 and (hs - 1) >= 0: |
| hs = hs - 1 |
| if (we - ws) % 2 == 1 and (we + 1) <= w: |
| we = we + 1 |
| if (we - ws) % 2 == 1 and (ws - 1) >= 0: |
| ws = ws - 1 |
|
|
| if he - hs < 2 or we - ws < 2: |
| continue |
|
|
| data_dict[file] = [cntr, hs, he, ws, we] |
|
|
| np.save(join(dir, 'segs', f'{mode}_bbox_dict.npy'), data_dict) |