Как получить значение через for из load json?

я хочу получить

pprint(data['shapes'][0]['points'][0][0])

к

pprint(data['shapes'][i]['points'][0][0])

Потому что я хочу получить каждую точку (из файла json) о прямоугольнике что я могу обрезать маленький прямоугольник размером 32x32 jpg но в моем коде я просто получаю одно число как плюс "за" + "с" получить все поить?

мой формат 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>

мой код (вырезано по части, не завершено)

# -*- 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')

А если мне просто нужна информация о первой точке? enter image description here нравиться

для в диапазоне (0, len (список), шаг)

но сейчас

для в списке

# -*- 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
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать следующие вложенные циклы для перебора фигур и точек внутри.

Изменять:

pprint(data['shapes'][0]['points'][0][0])

к:

for shape in data['shapes']:
    for point in shape['points']:
        pprint(point)

Идеальный ответ Большое спасибо Позвольте мне купить вам выпить (вы можете предложить свой PayPal)

hukuto7750 10.09.2018 09:40

Другие вопросы по теме