проблема с функцией объединения каналов — python 3

#python

Вопрос:

У меня есть назначение, которое мне нужно, чтобы создать функцию, получающую X цветовых каналов, и объединить ее в один, например: функция приема:

 [[[1]], [[2]]]) → [[[1, 2]]]   

но с некоторых пор моя функция возвращает это

 [[[1], [2]]]  
 def combine_channels(channels):  channels_num = len(channels[0][0])  channel_row = []  new_channel = []  channel_combine = []  pixle_index = 0  while pixle_index lt; channels_num:  for i in image:  for j in i:  channel_row.append(j[pixle_index])  new_channel.append(channel_row)  channel_row = []  channel_combine.append(new_channel)  new_channel = []  pixle_index  = 1  return channel_combine  

NB: Я могу импортировать систему и математику только в том случае, если это как-то поможет.

Комментарии:

1. можете ли вы привести пример ввода для изображения? Или [[[1,2],[1,2],[1,4]]] это просто ввод?

2. Это и есть пример ввода, который мы получили 🙂

3. Я предполагаю, что у него гораздо больше, так что размер X, Y 2 и N цветовых каналов на пиксель?

4. Да, именно так! его размерность 2 и количество цветовых каналов N на пиксель(хотя бы 1)

5. Тогда разве ввод не является неправильным? можете ли вы проверить пример еще раз? или что [1, 2] [1, 2]… является ли отдельный пиксель?

Ответ №1:

Я не знаю, понял ли я, как выглядит изображение, сделаю предположение, что ваш профессор на самом деле будет вводить вот так:

 [  # channels  [  # rows  [1, 2, 3, ...], # pixels  [4, 5, 6, ...],  ...  ],   # channels  [  # rows  [1, 2, 3, ...],  [4, 5, 6, ...],  ...  ],  ]  

Код:

 gt;gt;gt; def combine_channels(image): ... copy = [] ... for row_pairs in zip(*image): ... copy.append([channel_combined for channel_combined in zip(*row_pairs)]) ... return copy  gt;gt;gt; combine_channels([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]]) [[(1, 1), (2, 2), (3, 3)], [(4, 4), (5, 5), (6, 6)]]  gt;gt;gt; combine_channels([[[1]], [[2]]]) [[(1, 2)]]  

Комментарии:

1. Привет, прежде всего я действительно хочу поблагодарить вас, я действительно ценю вашу помощь! Код правильный, но я только что написал, что случайно скопировал неправильный пример, как вы думали в начале.. Эта функция предполагает получение следующих входных данных : combine_channels([[[1]], [[2]]]) и вернуться : [[[1, 2]]] . В то время как код, который вы написали, возвращает это: [[[1]], [[2]]]. Еще раз большое вам спасибо, я пытаюсь это сделать в течение нескольких часов безрезультатно. К сожалению, я только начал кодировать, и мы получили задачу, которая намного выше нашего уровня..

2. Тогда лучше отредактируйте и обновите вопрос! Что касается нового дела, то какой тогда канал?

3. Я отредактировал вопрос выше 🙂 Функция предполагает получение каналов, а не изображения, и объединение их в изображение. Надеюсь, вы поняли, потому что я сам себя едва понимал. В любом случае, как вы можете видеть, я отредактировал приведенный выше пример 🙂

4. обновлено, если вы предпочитаете список кортежу, оберните [] его list()

5. Ты приглашен на мою свадьбу. Большая благодарность!