Преобразовать изображения точек интереса в координаты - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть несколько изображений с заданной высотой и шириной и список POI в виде списка целочисленных значений. Я хочу преобразовать эти POI в список (x, y) координат. Я знаю, что это может сделать встроенный for l oop. Я ищу более эффективный способ использования np, Pillow, opencv2 или друзей.

Вот пример:

Image WxH: 1024x1024
POIs: [10, 1025, ...]

Result: [(10, 0), (1, 1), ...]

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

Это может быть выполнено кратко с использованием списка:

WIDTH = 1024
pois = [10, 1025, ...]

coordinates = [(p % WIDTH, p // WIDTH) for p in pois]

В качестве альтернативы, вы можете использовать встроенный модуль divmod для одновременного выполнения вычислений деления и остатка. Это, однако, приведет к получению пар в почтенном порядке из того, что вы ожидаете, поэтому вам нужно будет добавить дополнительный вызов к reverse:

coordinates = [reverse(divmod(p, WIDTH)) for p in pois]

Возможно, это будет более эффективно, но может составить результирующий список менее понятен.

0 голосов
/ 10 февраля 2020

Для этого есть специальная c функция:

np.unravel_index(pois, (ysize, xsize), order='C')
>>> (array([0, 1]), array([10,  1]))

, которые являются ожидаемыми координатами y, x (первый массив для y, второй массив для x).

Там также противоположная функция, np.ravel_multi_index().

...