数据集的简单制作和使用
参考资料:Labelme分割标注软件使用
使用labelme软件对数据集进行分割
每张图片获得一个json文件
我们看看其中一个文件,内容包含每个点在图片中的位置
我们可以自己写一个脚本(或使用别人的)将上述json转换为我们想要的json格式
|
|
|
|
我们来看看annotations.json中的具体内容
images部分包含图片的相对路径
annotations部分包含对应图片中各个物体的id、分割点坐标、bounding box坐标等
如何利用annotations.json文件从某张图片中提取出我们想要的信息?
(1)打开这个json文件
with open(anno_json, 'r') as f:
data = json.load(f)
self.images = data["images"]
self.annotations = data["annotations"]
(2)根据json文件中的各个字段锁定想要的信息
示例代码
# 根据下标获取图片 {...'file_name':'JPEGImages/.jpg,height:,width}
first_image = self.images[first_image_index]
# path/.../.jpg
tar_image_path = os.path.join(self.image_root, first_image["file_name"])
# [[[74,81,120],[],[]...[]]]
tar_image = cv2.imread(tar_image_path)
# images中id对应annotation中的image_id,根据 image_id 获取对应的 annotations
# 第一张图片中的第一个物体和第二个物体的分割信息[{'area':,'bbox':[..,..,..,..],'category_id':1,'id':30,'image_id':15,'segmentation:[[..,..,..]]},{同第一个}]
first_annotations = [ann for ann in self.annotations if ann["image_id"] == first_image["id"]]
# 第一张图片中第一个物体的分割信息{'area':,'bbox':[..,..,..,..],'category_id':1,'id':30,'image_id':15,'segmentation:[[..,..,..]]}
object_mask_ann = first_annotations[1]
# 获得分割点坐标 segmentation:[..,..,..]
segmentation = object_mask_ann["segmentation"][0]
# 获得bbox
target_object_bbox = object_mask_ann["bbox"]
经过处理得到自己想要的信息