我想要得到
pprint(data['shapes'][0]['points'][0][0])
到
pprint(data['shapes'][i]['points'][0][0])
因为我想获得有关矩形的所有信息(来自json文件) 我可以裁剪32x32大小的小矩形 jpg 但是在我的代码中,我只得到一个数字 如何加上“ for”和“ with”来获得所有poit?
我的json格式
<pre>
{
"flags": {},
"imagePath": "035653_20141227_CT_8038_27_09.png",
"lineColor": null,
"shapes": [
{
"points": [
[
322,
208
],
[
354,
208
],
[
354,
240
],
[
322,
240
]
],
"fill_color": null,
"label": "hematoma_with_brain",
"line_color": null
},
{
"points": [
[
347,
185
],
[
379,
185
],
[
379,
217
],
[
347,
217
]
],
"fill_color": null,
"label": "hematoma_with_brain",
"line_color": null
},
{
"points": [
[
366,
226
],
[
398,
226
],
[
398,
258
],
[
366,
258
]
],
"fill_color": null,
"label": "hematoma_with_brain",
"line_color": null
},
{
"points": [
[
354,
264
],
[
386,
264
],
[
386,
296
],
[
354,
296
]
],
"fill_color": null,
"label": "hematoma_with_brain",
"line_color": null
},
{
"points": [
[
321,
249
],
[
353,
249
],
[
353,
281
],
[
321,
281
]
],
"fill_color": null,
"label": "hematoma_with_brain",
"line_color": null
}
],
"fillColor": null,
"imageData": null
}
</pre>
我的代码(按poit部分剪切未完成)
# -*- coding:utf-8 -*-
from PIL import Image
from glob import glob
from os import getcwd,chdir
import json
from pprint import pprint
# get file from directory
def list_files(directory, extension):
saved = getcwd()
chdir(directory)
it = glob('*.' + extension)
chdir(saved)
for imgName in it:
filename=imgName[:-4]
filename="C:\\Users\\admin\\Desktop\\crop_image_source\\"+filename
print(filename)
with open(filename+'.json') as f:
data = json.load(f)
pprint(data['shapes'][0]['points'][0][0])
# cut(imgName,32,32)
# print(type(it))
# crop image
def cut(id,vx,vy):
# open image
name1 = "C:\\Users\\admin\\Desktop\\crop_image_source\\"+id
name2 = "C:\\Users\\admin\\Desktop\\crop_image_source\\" + id + "_crop.jpg"
im =Image.open(name1)
#offset
dx = 32
dy = 32
n = 1
#left top
x1 = 0
y1 = 0
x2 = vx
y2 = vy
#vertical
while x2 <= 512:
#horizontal
while y2 <= 512:
name3 = name2 + str(n) + ".jpg"
im2 = im.crop((y1, x1, y2, x2))
im2.save(name3)
y1 = y1 + dy
y2 = y1 + vy
n = n + 1
x1 = x1 + dx
x2 = x1 + vx
y1 = 0
y2 = vy
print("success cut done,get total crop image count:")
return n-1
if __name__=="__main__":
id = "1"
#crop size vx,vy
#big size
# res = cut(id,32,32)
#meddle size
#res = cut(id,120,120)
#small size
#res = cut(id,80,80)
# print(res)
source_directory="C:\\Users\\admin\\Desktop\\crop_image_source\\"
list_files(source_directory,'png')
在范围内(0,len(list),step)
但现在是
在列表中
# -*- coding:utf-8 -*-
from PIL import Image
from glob import glob
from os import getcwd,chdir
import json
from pprint import pprint
def cut(id,vx,vy,x1,y1):
name1 = "C:\\Users\\admin\\Desktop\\crop_image_source\\"+id
name2 = "C:\\Users\\admin\\Desktop\\crop_image_source\\" + id + "_crop.jpg"
im =Image.open(name1)
n = 1
x2 = x1 + vx
y2 = y1 + vy
name3 = name2 + str(n) + ".jpg"
im2 = im.crop((x1,y1, x2, y2))
im2.save(name3)
def list_files(directory, extension):
saved = getcwd()
chdir(directory)
it = glob('*.' + extension)
chdir(saved)
for imgName in it:
filename=imgName[:-4]
filename="C:\\Users\\admin\\Desktop\\crop_image_source\\"+filename
with open(filename+'.json') as f:
data = json.load(f)
for shape in data['shapes']:
for point in shape['points']:
pprint(point[0])
pprint(point[1])
cut(imgName,32,32,point[0],point[1])
if __name__=="__main__":
source_directory="C:\\Users\\admin\\Desktop\\crop_image_source\\"
list_files(source_directory,'png')
答案 0 :(得分:1)
您可以使用以下嵌套循环在形状和其中的点上进行迭代。
更改:
pprint(data['shapes'][0]['points'][0][0])
收件人:
for shape in data['shapes']:
for point in shape['points']:
pprint(point)