#python #opencv #tiff #filesize
#python #opencv #tiff #размер файла
Вопрос:
У меня есть 1,17 Гб tiff («тепловая карта»), который я хочу обрезать до контура другого 425,7 Мб tiff («тротуар»). Тепловая карта содержит тонкие цветовые оттенки, которые я хочу сохранить в конечном изображении. Я использую bitwise_and
операцию для применения изображения дорожного покрытия в качестве маски и использования cv2.imwrite
для сохранения. Но результирующему tiff не хватает едва заметного затенения и составляет всего 10,5 Мб. Это кажется большим уменьшением размера и, вероятно, поэтому конечное изображение имеет меньшую детализацию.
Что я могу сделать, чтобы сохранить тонкое затенение ввода в выходном изображении?
import sys
import cv2
import numpy as np
heatmapfile = "heatmap.tif"
pavementfile = "pavement.tif"
output = "masked_heatmap.tif"
heatmap = cv2.imread(heatmapfile,-1)
pavement = cv2.imread(pavementfile,0)
# apply thresholding to create mask
ret, binimg = cv2.threshold(pavement,1,255,cv2.THRESH_BINARY)
# make binary image same size as heatmap, needed for bitwise_and
bin_4ch = cv2.cvtColor(binimg,cv2.COLOR_GRAY2BGRA)
# mask the heatmap and save
hm_masked = cv2.bitwise_and(heatmap,bin4ch)
cv2.imwrite(output, hm_masked)
Комментарии:
1. Вы просматривали OpenCV
ImwriteFlags
, особенно те, которые касаются изображений TIFF?2. @HansHirse: спасибо за совет! Действительно, существует флаг для сжатия в формате TIFF, и по умолчанию используется LZW:
IMWRITE_TIFF_COMPRESSION
. Это объясняет изменение размера файла, но не изменение внешнего вида. Разве несжатый tiff не должен выглядеть так же, как оригинал?