zoukankan      html  css  js  c++  java
  • gray灰度标签图转coco数据集

    import cv2
    import os
    import numpy as np
    import json
    
    # / *0
    # beijing
    # *1
    # yalibiaoyuanhuan
    # *2
    # yellow
    # *3
    # green
    # *4
    # red
    # *5
    # blue
    # *6
    # indicator
    # * /
    
    ###########################################################################################
    ## LABEL: yalibiao
    # my_label = {"background":0,
    #             "yuanhuan":1,
    #             "yellow":2,
    #             "green":3,
    #             "red":4,
    #             "blue":5,
    #             "indicator":6}
    
    my_label = {"background":0,
                "0":1,
                "1":2,
                "2":3,
                "3":4,
                "4":5,
                "5":6,
                "6":7,
                "7":8,
                "8":9,
                "9":10,
                "A":11,
                "B":12,
                "C": 13,
                "D": 14,
                "E": 15,
                "F": 16,
                "G": 17,
                "H": 18,
                "J": 19,
                "K": 20,
                "L": 21,
                "M": 22,
                "N": 23,
                "P": 24,
                "R": 25,
                "S": 26,
                "T": 27,
                "U": 28,
                "V": 29,
                "W": 30,
                "X": 31,
                "Y": 32,
                "Z": 33
                }
    
    def gray2src_name(gray_img_name):
        #gray_name:  gray_sz_ylb_0.png
        #src_name:   src_sz_ylb_0.png
        img_name = gray_img_name.replace("gray", "src")
    
        #img_name = img_name.replace("png", "jpg")
        return img_name
    #############################################################################################
    
    
    
    coco = dict()
    coco['images'] = []
    coco['type'] = 'instances'
    coco['annotations'] = []
    coco['categories'] = []
    
    category_set = dict()
    image_set = set()
    
    category_item_id = 0
    image_id = 20190000000
    annotation_id = 0
    
    def addLabelItem(my_label):
        my_label = sorted(my_label.items(),key=lambda item:item[1])
        for val in my_label:
            category_item = dict()
            category_item['supercategory'] = 'none'
            category_item_id = val[1]
            if 0 == category_item_id:
                continue
            category_item['id'] = category_item_id
            category_item['name'] = val[0]
            coco['categories'].append(category_item)
    
    
    def addImgItem(file_name, img):
        global image_id
        if file_name is None:
            raise Exception('Could not find filename tag in xml file.')
        if img is None:
            raise Exception('Could not find img.')
    
        image_id += 1
        image_item = dict()
        image_item['id'] = image_id
        image_item['file_name'] = file_name
        image_item['width'] = img.shape[1] #size['width']
        image_item['height'] = img.shape[0]   #size['height']
        coco['images'].append(image_item)
        image_set.add(file_name)
        return image_id
    
    def addAnnoItem( image_id, category_id, area, seg, bbox):
        bbox = list(bbox)
        global annotation_id
        annotation_item = dict()
        annotation_item['segmentation'] = []
        annotation_item['segmentation'].append(seg)
    
        annotation_item['area'] = area
        annotation_item['iscrowd'] = 0
        annotation_item['ignore'] = 0
        annotation_item['image_id'] = image_id
        annotation_item['bbox'] = bbox
        annotation_item['category_id'] = category_id
        annotation_id += 1
        annotation_item['id'] = annotation_id
        coco['annotations'].append(annotation_item)
    
    def gray_img2coco(root):
        addLabelItem(my_label)
        list_file = os.listdir(root)
        num_class = len(my_label)
        cnt = 0
        for img_name in list_file:
            cnt += 1
            print("cnt=%d,  img_name=%s"%(cnt,img_name))
            img_path = root + img_name
            img_gray = cv2.imread(img_path,-1)
            if len(img_gray.shape) == 3:
                img_gray = cv2.cvtColor(img_gray, cv2.COLOR_BGR2GRAY)
            #points = np.array(np.where(6 == img_gray)).transpose((1, 0))[:, ::-1]
    
            height = img_gray.shape[0]
            width = img_gray.shape[1]
            #img_name = img_name.replace("gray","src")
            img_name = gray2src_name(img_name)
            current_image_id = addImgItem(img_name, img_gray)
            for current_category_id in range(1,num_class):
                img_bi = np.zeros(img_gray.shape,dtype='uint8')
                img_bi[img_gray == current_category_id] = 255
                my_contours,_ = cv2.findContours(img_bi,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
                for c in my_contours:
                    area_t = cv2.contourArea(c)
                    #print("area=%d"%(cv2.contourArea(c)))
                    # print("L_pt_size=%d"%(len(L_pt)))
                    if 0 == len(c) or area_t < 20:
                        continue
                    L_pt = c
                    # x,y,w,h
                    bbox = cv2.boundingRect(L_pt)
                    x1,y1,w1,h1 = bbox
                    if x1<0 or y1<0 or x1+w1>width or y1+h1>height:
                        continue
                    seg = []
                    for val in L_pt:
                        #print (val)
                        x = val[0][0]
                        y = val[0][1]
                        seg.append(int(x)) ##zhongyao
                        seg.append(int(y))
                        # print("x=%d,y=%d"%(x,y))
    
                    addAnnoItem(current_image_id, current_category_id, area_t, seg, bbox)
    
                    # #m_t = np.ones(img_gray.shape,np.uint8)*255
                    # m_t = np.zeros([img_gray.shape[0], img_gray.shape[1], 3], dtype='uint8')
                    # cv2.drawContours(m_t,[L_pt],0,(255,0,0),1)
    
    
                    # cv2.imshow("m_t",m_t)
                    # cv2.imshow("img_bi", img_bi)
                    # cv2.imshow("gray",img_gray*20)
                    # cv2.waitKey(0)
    
    
    if __name__ == '__main__':
        root_gray_img =  "/maskrcnn-benchmark/datasets/coco/tmp/val_gray/"
        #  instances_train2014.json    instances_val2014.json
        json_file = "maskrcnn-benchmark/datasets/coco/tmp/instances_val2014.json"
        gray_img2coco(root_gray_img)
        json.dump(coco,open(json_file,'w'))
    
    
  • 相关阅读:
    flex
    当前不会命中断点 源代码与原始版本不一致
    c setjmp longjmp
    VS 快捷键设置
    Lua C API 遍历 table
    lua class
    复习 C++ 中类的函数指针
    apache ab
    rabbitmq
    协程 coroutine
  • 原文地址:https://www.cnblogs.com/yanghailin/p/11215003.html
Copyright © 2011-2022 走看看