#python #numpy #computer-vision
Вопрос:
Я хочу создать функцию, которая извлекает изображение только с помощью cv2 и numpy. Я не знаю, как складывать изображения, и после нескольких попыток я хотел бы знать, как бы вы подошли к этому быстро.
Подробные сведения
Исправления изображений сохраняются в каталоге следующим образом: «./input_path/file_name.label.jpg» Метка определяет положение пятна в исходном изображении. Сначала N изображений должны быть уложены вертикально. После этого результат должен быть сложен горизонтально, чтобы получить исходное изображение. Параметр n задается квадратным корнем из максимальной метки.
Мой Алгоритм
В алгоритме я прочитал все исправления изображений и сохранил их в списке. Кроме того, я вычисляю n. В конце фрагмента кода вы можете видеть, что я попробовал следующее:
- Создайте вложенный список, в котором каждый внутренний список имеет длину n.
- Складывайте внутренние списки вертикально.
- Сложите вертикальные стопки горизонтально.
Мой Код
def retrieve_from_patches(input_path, output_path, name): info = show_info(data_path=input_path, file_names=[name]) imgs = [] subset_info = info[info['names'].isin([name])] patches_idx_vertical = subset_info['labels'].max() patches_count = subset_info['labels'].max() 1 full_processed_data_path = output_path f'/retrieved_from_{patches_count}_patches/' Path(full_processed_data_path).mkdir(parents=True, exist_ok=True) for index, row in subset_info.iterrows(): name = row['names'] '.' str(row['labels']) '.jpg' img = cv2.imread(input_path name, 1) imgs.append(img) patches_count_vertical = int(np.sqrt(patches_count)) vertical_stacks = [] for i in range(0, patches_count_vertical): to_stack = [] for i in range(0, patches_count_vertical): to_stack.append(imgs.pop(0)) to_stack = np.array(to_stack) stacked = np.vstack(to_stack) #print(stacked.shape) vertical_stacks.append(stacked) print(len(vertical_stacks)) img = np.hstack(vertical_stacks) img = np.column_stack(img) print(img.shape)