Переставить изображение в Python - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь загрузить файл изображения в формате TIF и перегруппировать его в длинную полосу, но сохранить горизонтальный порядок. Когда я попытался использовать Numpy Reshape, он просто накладывает друг на друга различные строки или искажает изображение. Скажем, у меня есть такой массив

imagearray = [1,2,3,4,5,6,7,8,9,10],
             [0,0,0,0,0,0,0,0,0,0],
             [1,1,1,1,1,1,1,1,1,1],
             [2,2,2,2,2,2,2,2,2,2] 

Я хочу изменить его так, чтобы он выглядел следующим образом

[1,2],
[0,0],
[1,1],
[2,2],
[3,4],
[0,0],
[1,1],
[2,2]

и так далее. Моя проблема заключается в том, чтобы сохранить этот порядок, так как я переставляю его, не используя больше памяти, так как эти изображения объемом 3 ГБ с использованием изменения формы или перестановки - это способы, которыми я могу использовать меньше памяти. Я думаю, что это сложнее также потому, что изображение технически имеет форму (n, m, 3), которой я не совсем понимаю, как манипулировать. это то, как выглядит вывод из этого изображения , когда предполагается, что оно будет выглядеть более похоже на это

Это основыфайл, который я использую

import cv2
import matplotlib.pyplot as plt
from PIL import Image, ImageTk
Image.MAX_IMAGE_PIXELS = None
width =  4000
height = 4000
rollwidth = 1000
I = cv2.imread("image path")
print("read image")
resizedImage = cv2.resize(I,(height,width), interpolation= cv2.INTER_LANCZOS4)
print("combined done")
testimage = np.reshape(resizedImage,((np.ceil(width/rollwidth).astype(np.int64)*height),rollwidth,3), order ='C')
cv2.imwrite("save path", testimage)
print("done")

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

1 Ответ

1 голос
/ 23 октября 2019

На основе this post мы просто расширим его до трехмерного случая, имея в виду, что нам нужно разделить по второй оси, сохраняя третью ось (цветПервый канал) как есть -

# a is input 3D array
# ncols would be the width of the desired output image
m,n,r = a.shape
b = a.reshape(m,-1,ncols,r).swapaxes(0,1).reshape(-1,ncols,r)

Мотивация подробно обсуждается в this post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...