将COCO2017标注文件中的bbox显示在图片上

from pycocotools.coco import COCO
import cv2
import pandas as pd


def showNimages(imageidFile, annFile, imageFile, resultFile):
    """
    :param imageidFile: 要查看的图片imageid,存储一列在csv文件里 (目前设计的imageid需要为6位数,如果少于6位数,可以在前面加多个0)
    :param annFile:使用的标注文件
    :param imageFile:要读取的image所在文件夹
    :param resultFile:画了标注之后的image存储文件夹
    :return:
    """
    data = pd.read_csv(imageidFile)
    list = data.values.tolist()
    image_id = []  # 存储的是要提取图片id
    for i in range(len(list)):
        image_id.append(list[i][0])
    print(image_id)
    print(len(image_id))
    coco = COCO(annFile)

    for i in range(len(image_id)):
        image = cv2.imread(imageFile + '000000' + str(image_id[i]) + '.jpg')
        annIds = coco.getAnnIds(imgIds=image_id[i], iscrowd=None)
        anns = coco.loadAnns(annIds)
        for n in range(len(anns)):
            x, y, w, h = anns[n]['bbox']
            x, y, w, h = int(x), int(y), int(w), int(h)
            # print(x, y, w, h)
            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255))
        cv2.imwrite(resultFile + '000000' + str(image_id[i]) + 'result.png', image)
    print("生成图片存在{}".format(resultFile))

函数使用方法

if __name__ == "__main__":
	imageidFile = '/Desktop/myimage_id.csv'
    annFile = 'instances_val2017.json'
    imageFile = '/Users/Desktop/annotations/val2017/'
    resultFile = '/Users/Desktop/image/'

注意看imageidFile里面的数据格式:目前要求是6位,可以自己调整一下程序

效果如下

猜你喜欢

转载自blog.csdn.net/zhuoyuezai/article/details/84315113