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位,可以自己调整一下程序
效果如下