博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
coco数据集json可视化---实例分割--opencv
阅读量:2050 次
发布时间:2019-04-28

本文共 5254 字,大约阅读时间需要 17 分钟。

# -*- coding: utf-8 -*-import osimport sys, getoptfrom pycocotools.coco import COCO, maskUtilsimport cv2import numpy as npdef mkdir_os(path):    if not os.path.exists(path):        os.makedirs(path)def main(argv):    #json_file = './data/coco/annotations/instances_val2017.json'    #dataset_dir = './data/coco/val2017/'    #save_dir = './data/coco/vis/'    inputfile = ''    jsonfile = ''    outputfile = ''    try:        opts, args = getopt.getopt(argv,"hi:j:o:",["ifile=","jfile=","ofile="])    except getopt.GetoptError:        print('test.py -i 
-j
-o
') sys.exit(2) for opt, arg in opts: if opt == '-h': print('test.py -i
-j
-o
') sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg elif opt in ("-j", "--jfile"): jsonfile = arg elif opt in ("-o", "--ofile"): outputfile = arg print('\n输入的文件为:', inputfile) print('\n输入的json为:', jsonfile) print('\n输出的文件为:', outputfile) mkdir_os(outputfile) coco = COCO(jsonfile) catIds = coco.getCatIds(catNms=['person']) # catIds=1 表示人这一类 imgIds = coco.getImgIds(catIds=catIds ) # 图片id,许多值 for i in range(len(imgIds)): if i%100 == 0: print(i,"/", len(imgIds)) img = coco.loadImgs(imgIds[i])[0] cvImage = cv2.imread(os.path.join(inputfile, img['file_name']), -1) cvImage = cv2.cvtColor(cvImage, cv2.COLOR_BGR2GRAY) cvImage = cv2.cvtColor(cvImage, cv2.COLOR_GRAY2BGR) annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None) anns = coco.loadAnns(annIds) polygons = [] color = [] for ann in anns: if 'segmentation' in ann: if type(ann['segmentation']) == list: # polygon for seg in ann['segmentation']: poly = np.array(seg).reshape((int(len(seg) / 2), 2)) poly_list = poly.tolist() polygons.append(poly_list) else: exit() print("-------------") # mask t = imgIds[ann['image_id']] if type(ann['segmentation']['counts']) == list: rle = maskUtils.frPyObjects([ann['segmentation']], t['height'], t['width']) else: rle = [ann['segmentation']] m = maskUtils.decode(rle) if ann['iscrowd'] == 1: color_mask = np.array([255, 0, 0]) if ann['iscrowd'] == 0: color_mask = np.array([255, 255, 0]) mask = m.astype(np.bool) cvImage[mask] = cvImage[mask] * 0.7 + color_mask * 0.3 point_size = 2 thickness = 2 for key in range(len(polygons)): ndata = polygons[key] for k in range(len(ndata)): data = ndata[k] cv2.circle(cvImage, (data[0], data[1]), point_size, (0, 255, 255), thickness) cv2.imwrite(os.path.join(outputfile, img['file_name']), cvImage)if __name__ == "__main__": main(sys.argv[1:])

 

修改版本:

# -*- coding: utf-8 -*-import osimport sys, getoptfrom pycocotools.coco import COCO, maskUtilsimport cv2import numpy as npdef mkdir_os(path):    if not os.path.exists(path):        os.makedirs(path)def main(argv):    # json_file = './data/coco/annotations/instances_val2017.json'    # dataset_dir = './data/coco/val2017/'    # save_dir = './data/coco/vis/'    inputfile = ''    jsonfile = ''    outputfile = ''    try:        opts, args = getopt.getopt(argv, "hi:j:o:", ["ifile=", "jfile=", "ofile="])    except getopt.GetoptError:        print('test.py -i 
-j
-o
') sys.exit(2) for opt, arg in opts: if opt == '-h': print('test.py -i
-j
-o
') sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg elif opt in ("-j", "--jfile"): jsonfile = arg elif opt in ("-o", "--ofile"): outputfile = arg print('\n输入的文件为:', inputfile) print('\n输入的json为:', jsonfile) print('\n输出的文件为:', outputfile) mkdir_os(outputfile) coco = COCO(jsonfile) catIds = coco.getCatIds(catNms=['wires']) # catIds=1 表示人这一类 imgIds = coco.getImgIds(catIds=catIds) # 图片id,许多值 for i in range(len(imgIds)): if i % 100 == 0: print(i, "/", len(imgIds)) img = coco.loadImgs(imgIds[i])[0] cvImage = cv2.imread(os.path.join(inputfile, img['file_name']), -1) cvImage = cv2.cvtColor(cvImage, cv2.COLOR_BGR2GRAY) cvImage = cv2.cvtColor(cvImage, cv2.COLOR_GRAY2BGR) annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None) anns = coco.loadAnns(annIds) polygons = [] color = [] for ann in anns: if 'segmentation' in ann: if type(ann['segmentation']) == list: # polygon for seg in ann['segmentation']: poly = np.array(seg).reshape((int(len(seg) / 2), 2)) poly_list = poly.tolist() polygons.append(poly_list) if ann['iscrowd'] == 0: color.append([0, 0, 255]) if ann['iscrowd'] == 1: color.append([0, 255, 255]) else: exit() print("-------------") # mask t = imgIds[ann['image_id']] if type(ann['segmentation']['counts']) == list: rle = maskUtils.frPyObjects([ann['segmentation']], t['height'], t['width']) else: rle = [ann['segmentation']] m = maskUtils.decode(rle) if ann['iscrowd'] == 0: color_mask = np.array([0, 0, 255]) if ann['iscrowd'] == 1: color_mask = np.array([0, 255, 255]) mask = m.astype(np.bool) cvImage[mask] = cvImage[mask] * 0.7 + color_mask * 0.3 point_size = 2 thickness = 2 for key in range(len(polygons)): ndata = polygons[key] cur_color = color[key] for k in range(len(ndata)): data = ndata[k] cv2.circle(cvImage, (data[0], data[1]), point_size, (cur_color[0], cur_color[1], cur_color[2]), thickness) cv2.imwrite(os.path.join(outputfile, img['file_name']), cvImage)if __name__ == "__main__": main(sys.argv[1:])

 

转载地址:http://lwwlf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
Leetcode C++ 剑指 Offer 09. 用两个栈实现队列
查看>>
Leetcode C++《每日一题》20200707 112. 路径总和
查看>>
云原生 第十一章 应用健康
查看>>
Leetcode C++ 《第202场周赛》
查看>>
云原生 第十二章 可观测性:监控与日志
查看>>
Leetcode C++ 《第203场周赛》
查看>>
云原生 第十三章 Kubernetes网络概念及策略控制
查看>>
《redis设计与实现》 第一部分:数据结构与对象 || 读书笔记
查看>>
《redis设计与实现》 第二部分(第9-11章):单机数据库的实现
查看>>
算法工程师 面经2019年5月
查看>>
搜索架构师 一面面经2019年6月
查看>>