Перебирайте изображения и сохраняйте каждое изображение как элемент списка - PullRequest
0 голосов
/ 13 октября 2019

Привет, у меня есть несколько изображений в папке, и я перебираю их и преобразовываю в блоки размером 20x20. Для каждого блока в изображении я вычисляю среднее значение, и это делается для каждого изображения. Я хочу получить результат в виде списка списка, что означает, что если у меня есть 6 изображений, должно быть 6 элементов списка, и для каждого элемента списка должен быть массив 20x20, имеющий средние значения всех блоков.

img = [cv2.imread(file,0) for file in glob.glob("resized/*.jpg")]
X=[]
for im in img:
    arr = np.asarray(im)
    arr = np.split(arr, 20)
    arr = np.array([np.split(x, 20, 1) for x in arr])
    mat = [arr[i][j].mean() for i in range(20) for j in range(20)]
    X.append(mat)

Это желаемый результат.

[[0,0.1,....,],[0,0.1,....,],[0,0.1,....,],[0,0.1,....,],[0,0.1,....,],[0,0.1,....,]]. Each item should be 400 values.

Но сейчас я получаю только 400 значений.

[[0.0,
  0.0,
  0.0,
  0.0,
  0.0,
 ....
  3.99,
  2.16,
  12.23,
  0.0,
  0.0,
  5.07,
  7.65,
 ....
  0.0,
  0.0,
  0.0]]

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Текущий код, который у меня есть, выполняет желаемый вывод, как я хочу. Мне было плохо, что я этого раньше не замечал. Код генерирует 6 элементов списка, длина каждого элемента списка равна 400, что является количеством блоков в одном изображении. Следовательно, у нас есть двумерный список длиной 6, где каждый элемент списка является списком средних значений каждого блока.

0 голосов
/ 13 октября 2019

Ваше понимание списка возвращает список отдельных значений. Чтобы создать двухмерный список, попробуйте:

mat = [[arr[i][j].mean() for i in range(20)] for j in range(20)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...