COCO是一個廣泛使用的圖像分割數據集,包含超過330,000張圖像,具有80種不同的對象類別。在這篇文章中,我們將介紹如何使用Python從COCO JSON數據中提取分割圖片。
首先,我們需要導入必要的Python庫,包括numpy,matplotlib和PIL等:
import json import numpy as np import matplotlib.pyplot as plt from PIL import Image
然后,我們需要加載COCO JSON文件,并解析成Python字典:
with open('annotations/instances_train2017.json', 'r') as f: data = json.load(f)
接下來,我們可以定義一個函數來提取分割圖片并將其保存到指定的目錄下:
def extract_segmented_images(data, save_path): annotations = data['annotations'] images = data['images'] for ann in annotations: image_id = ann['image_id'] image = next(img for img in images if img['id'] == image_id) file_name = image['file_name'] segmented_image = Image.open('images/'+file_name).convert('RGBA') mask = np.zeros((image['height'], image['width']), dtype=np.uint8) for seg in ann['segmentation']: mask = np.maximum(mask, seg['size']) mask_image = Image.fromarray(mask, mode='L').convert('1') segmented_image.putalpha(mask_image) segmented_image.save(save_path+file_name)
在這個函數中,我們首先獲取每個注釋對象的圖像ID,然后從圖像列表中選擇該ID對應的圖像。接下來,我們打開該圖像的分割版本,并將其轉換為RGBA模式。
然后,我們創建一個大小與圖像相同的新掩碼,并將其初始化為零。接下來,我們將所有分割對象的大小合并為掩碼的最大值。然后,我們將這個掩碼轉化為灰度圖像,并將其轉化為二進制形式。
最后,我們將分割圖像與掩碼相乘,并將其保存到指定目錄下的文件中。
最后,我們可以調用這個函數來提取所有分割圖像:
extract_segmented_images(data, 'segmented_images/')
這樣,我們就成功地從COCO JSON數據集中提取并保存了所有的分割圖像,以便進行后續的圖像分析和處理。