Я пытаюсь найти оптимальный способ объединения небольших изображений JPEG размером 8 на 8 пикселей в более крупный файл JPEG, который занимает меньше места на диске.
У меня есть изображение, которое я разделил на различные меньшие изображения размером 8 на 8 пикселей, однако я заметил, что общее дисковое пространство, занимаемое папкой, содержащей все эти меньшие изображения, было значительно выше, чем дисковое пространство для исходного изображения , Заметив это, я предположил, что, наоборот, объединение небольших изображений в одно большое изображение может занять меньше места.
Я использую OpenCV в Python, и я заметил, что простое чтение и запись изображения создает новый файл, который занимает больше места, чем оригинал (я тоже не уверен, почему это происходит). Однако, когда я объединил меньшие изображения в вертикальное растяжение, на котором все 8 на 8 пикселей располагаются друг над другом, оно заняло больше места, чем когда я оставил изображение в его исходных размерах. Мне было интересно, есть ли способ определить, как объединить изображения таким образом, чтобы пространство, занимаемое объединенным изображением, было минимальным. Не имеет значения, в каком положении находится каждое из исходных изображений 8 на 8 в объединенном изображении или каковы размеры объединенного изображения.
Вот код для разделения изображения на различные меньшие изображения:
def save(path):
img = cv2.imread('Images\\' + path)
max_ind = 1
for i in range(0,len(img)-8,8):
for j in range(0,len(img[0])-8,8):
sections = img[i:i+8]
save = []
for section in sections:
save.append(section[j:j+8])
cv2.imwrite("Saves\\" + str(max_ind) + ".jpg",np.array(save))
max_ind += 1
А вот код, который я использовал для сохранения изображения таким образом, что все его 8 на 8 пикселей накладываются друг на друга:
def save_master(path):
img = cv2.imread('Images\\' + path)
master = []
for i in range(0,len(img)-8,8):
for j in range(0,len(img[0])-8,8):
sections = img[i:i+8]
save = []
for section in sections:
save.append(section[j:j+8])
master.extend(np.array(save))
cv2.imwrite("Saves\\" + "master.jpg",np.array(master))