使用python PIL库读取MSCOCO的bounding box

来源:互联网 发布:顺丰淘宝买飞机 编辑:程序博客网 时间:2024/05/21 16:10

这里使用的是MSCOCO里annotations_trainval2017里的数据集,因为是比较大的json文件,为方便查阅,我们用spdyer将其打开。

with open(path+'/'+filename_arr[2]+'.json') as f:    instances_train = json.load(f)with open(path + '/' + filename_arr[3] + '.json') as f:    instances_val = json.load(f)

运行完后会在右上角像matlab一样显示出变量,如下图
这里写图片描述
可以看到instances_train就是训练集的数据,是一个字典,双击就可以看到字典里的元素,结果如下图中的左上。其中annotations是对图片中物体标注的数据集,categories是所有物体的分类集,images是原始图片的信息,info是mscoco的信息,licenses就是法律方面相关的东西了。
这里写图片描述
我们打开annotations得到图中右上的结构,其中每一条代表图中一个物体的信息,打开其中一条得到上图中最下面的结构。里面的bbox就是bounding box,括号里面分别是(x, y, width, height),(x,y)是bbox左上角的坐标,width,height分别是bbox的宽和高。categories_id是物体种类的id,每个id是什么物体可以上一个表中categories里查到。image_id就是原始图片的id,这个id和下载的图片的名称是相对应的。

在了解完数据后,就要开始使用了。这里是使用bbox来做图像识别,用神经网络来进行训练。首先我们要根据bbox来得到对应方框的像素值。这里我们使用PIL库。安装方法: pip install Pillow
首先读入数据:

im = Image.open(filepath)

然后我们主要使用crop(left, up, right, lower)方法,它是对图像特定区域进行裁剪。注意它的参数和bbox里的值含义不同,left是指bbox左边距整个图像左边的距离,up是指bbox上沿距图像顶端的距离,其他两个类似。所以在传参时如下:

region = im.crop(x, y, x+width, y+height)data = region.getdata()

然后再用getdata()函数获取的像素矩阵,然后合成成自己的神经网络所需要的输入形式。
这篇文章到这里就结束了。

原创粉丝点击