Координаты Python вне диапазона для полигона - PullRequest
0 голосов
/ 28 июня 2019

Я работаю над сценарием, работа которого заключается в том, чтобы прочесывать CSV-файл, полный значений пикселей. Я использовал файл json, чтобы найти размеры многоугольника, который я предварительно аннотировал, и пытаюсь вычислить значение для средних пикселей в этом объекте. список pixel_temperam-а [512] [640] совпадает с размерами изображения. Я использую функции многоугольника скимаджа для вычисления всех пикселей в точках моего многоугольника

# Find all points within polygon
                        r = np.array([y1, y2, y3, y4])
                        c = np.array([x1, x2, x3, x4])
                        x_axis, y_axis = draw.polygon(r, c)

ПРИМЕЧАНИЕ: x и y в моем JSON и перепутаны, поэтому я заявляю, что y первый

Это приводит к двум nparrays (x_axis, y_axis) одинаковой длины (проверено это с выбранными случайными точками, также они являются координатами, поэтому должны быть в парах) Я пытаюсь перебрать эти два списка одновременно и затем вычислить мое значение , Это работает для большинства моих полигонов, но я случайно нажал

Traceback (most recent call last):
  File "u-valueV2.py", line 232, in <module>
    main()
  File "u-valueV2.py", line 228, in main
    parseJSON(jsonFilePath)
  File "u-valueV2.py", line 113, in parseJSON
    average_u_value = parseCSVPolygon(csvFilePath, csvFileName[0], x_axis, y_axis)
  File "u-valueV2.py", line 197, in parseCSVPolygon
    total += u_value_calculation(emissivity, pixel_temperature[x[item]][y[item]])
IndexError: list index out of range

Поскольку списки имеют одинаковую длину, а мой список pixel_temp содержит все 512 на 640 значений, я не понимаю, почему я получаю эту ошибку.

Ошибка относится к этому блоку в моей функции parseCSVPolygon

fileName += ".csv"
path = csvFilePath + '/' + fileName
with open(path) as read_csv:
    csvData = csv.reader(read_csv, delimiter=',', quotechar='|')  # Seperated by comma (hence csv)
    for i, data in enumerate(csvData):  # i holds the index and increments each loop while data holds cells value
        length = len(data)
        if (length == 0):  # Incase the length of a row is 0 (empty cells)
            continue
        else:
            index = length - 1  # Extract the last data point in the row
        if (i == 2):
            emissivity = float(data[index])
            #print(emissivity)
        if (i >= 10):
            pixel_temperature.append(data[1:])  # Pixel temperature now holds 512 indexes. Each index

#TODO: Figure out how to calculate the doors u-value (or Polygons)
for item in range(len(y)):
    total += u_value_calculation(emissivity, pixel_temperature[x[item]][y[item]])
average = total / (len(x) * len(y))
return average

Я озадачен источником этой ошибки. Кто-нибудь может мне помочь?

...