网上找到的都是要积分下载,自己尝试着补充了下area计算,不一定正确..
mask面积计算:
1.根据labelme生成的json文件里的points来生成mask
2.确定目标检测框的位置(左上角位置,右下角位置)
3.依次计算mask中一行像素与下一行像素组成的梯形的面积,由于mask一定是连续的,所以梯形的边长可以通过遍历当前行像素的值来求(像素为1表示属于mask),最后对每一行求和.
完整代码如下(除了relArea其他是照搬的)
# -*- coding:utf-8 -*-
# !/usr/bin/env python
import argparse
import json
import matplotlib.pyplot as plt
import skimage.io as io
import cv2
from labelme import utils
import numpy as np
import glob
import PIL.Image
class labelme2coco(object):
def __init__(self,labelme_json=[],save_json_path='./new.json'):
'''
:param labelme_json: 所有labelme的json文件路径组成的列表
:param save_json_path: json保存位置
'''
self.labelme_json=labelme_json
self.save_json_path=save_json_path
self.images=[]
self.categories=[]
self.annotations=[]
# self.data_coco = {}
self.label=[]
self.annID=1
self.height=0
self.width=0
self.save_json()
def data_transfer(self):
for num,json_file in enumerate(self.labelme_json):
with open(json_file,'r') as fp:
data = json.load(fp) # 加载json文件
self.images.append(self.image(data,num))