image和mask转换成coco的分割数据格式

在以下的过程中,有block和mouse两个分类,可以修改的,增加或者减少分类个数都是可以的。
其目的是将分割的mask图片label格式转换成coco格式

import json
import numpy as np
from pycocotools import mask
from skimage import measure
import cv2
import os
import sys
if sys.version_info[0] >= 3:
    unicode = str
__author__ = 'hcaesar'
import io
def maskToanno(ground_truth_binary_mask,ann_count,category_id):
    fortran_ground_truth_binary_mask = np.asfortranarray(ground_truth_binary_mask)
    encoded_ground_truth = mask.encode(fortran_ground_truth_binary_mask)
    ground_truth_area = mask.area(encoded_ground_truth)
    ground_truth_bounding_box = mask.toBbox(encoded_ground_truth)
    contours = measure.find_contours(ground_truth_binary_mask, 0.5)

    annotation = {
        "segmentation": [],
        "area": ground_truth_area.tolist(),
        "iscrowd": 0,
        "image_id": ann_count,
        "bbox": ground_truth_bounding_box.tolist(),
        "category_id": category_id,
        "id": ann_count
    }
    for contour in contours:
        contour = np.flip(contour, axis=1)
        segmentation = contour.ravel().tolist()
        annotation["segmentation"].append(segmentation)
    return annotation
block_mask_path="D:\\6Ddataset\\XieSegmentation\\1block\\block_mask_thresh"
mouse_mask_path="D:\\6Ddataset\\XieSegmentation\\2mouse\\mouse_mask_thresh"
block_mask_image_files=os.listdir(block_mask_path)
mouse_mask_image_files=os.listdir(mouse_mask_path)
jsonPath="blockmouseAll.json"
annCount=0
imageCount=0
path="D:\\6Ddataset\\XieSegmentation\\1block\\block_rgb"
rgb_image_files=os.listdir(path)
with io.open(jsonPath, 'w', encoding='utf8') as output:
    # 那就全部写在一个文件夹好了
    # 先写images的信息
    output.write(unicode('{\n'))
    output.write(unicode('"images": [\n'))
    for image in rgb_image_files:
        output.write(unicode('{'))
        annotation = {
            "height": 480,
            "width": 640,
            "id": imageCount,
            "file_name": image
        }
        str_ = json.dumps(annotation,indent=4)
        str_ = str_[1:-1]
        if len(str_) > 0:
            output.write(unicode(str_))
            imageCount = imageCount + 1
        if(image=="0000000599_rgb.png"):
            output.write(unicode('}\n'))
        else:
            output.write(unicode('},\n'))
    output.write(unicode('],\n'))
    #接下来写cate
    output.write(unicode('"categories": [\n'))
    output.write(unicode('{\n'))
    categories={
        "supercategory": "block",
        "id": 0,
        "name": "block"
    }
    str_ = json.dumps(categories, indent=4)
    str_ = str_[1:-1]
    if len(str_) > 0:
        output.write(unicode(str_))
    output.write(unicode('},\n'))
    output.write(unicode('{\n'))
    categories={
        "supercategory": "mouse",
        "id": 1,
        "name": "mouse"
    }
    str_ = json.dumps(categories, indent=4)
    str_ = str_[1:-1]
    if len(str_) > 0:
        output.write(unicode(str_))
    output.write(unicode('}\n'))
    output.write(unicode('],\n'))
    output.write(unicode('"annotations": [\n'))
    for i in range(len(block_mask_image_files)):
    #for (block_image,mouse_image) in (block_mask_image_files,mouse_mask_image_files):
        block_image=block_mask_image_files[i]
        mouse_image=mouse_mask_image_files[i]
        #output.write(unicode('{\n'))
        block_im=cv2.imread(os.path.join(block_mask_path,block_image),0)
        mouse_im = cv2.imread(os.path.join(mouse_mask_path, mouse_image), 0)
        _,block_im=cv2.threshold(block_im,100,1,cv2.THRESH_BINARY)
        _, mouse_im = cv2.threshold(mouse_im, 100, 1, cv2.THRESH_BINARY)
        block_im=np.array(block_im).astype(np.uint8)
        mouse_im = np.array(mouse_im).astype(np.uint8)
        block_anno=maskToanno(block_im,annCount,0)
        mouse_anno = maskToanno(mouse_im, annCount,1)
        str_block = json.dumps(block_anno,indent=4)
        str_block = str_block[1:-1]
        str_mouse = json.dumps(mouse_anno,indent=4)
        str_mouse = str_mouse[1:-1]
        if len(str_block) > 0:
            output.write(unicode('{\n'))
            output.write(unicode(str_block))
            output.write(unicode('},\n'))
            output.write(unicode('{\n'))
            output.write(unicode(str_mouse))
            if (block_image == "0000000599_labels.png"):
                output.write(unicode('}\n'))
            else:
                output.write(unicode('},\n'))
            #output.write(unicode('},\n'))
            annCount = annCount + 1
    output.write(unicode(']\n'))
    output.write(unicode('}\n'))
        #output.write(unicode('},\n'))
#cate



  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值