本文主要是介绍python-对超大遥感图像进行裁剪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码如下:
from PIL import Image
# 解决文件过大问题
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
Image.MAX_IMAGE_PIXELS = None
import sys#先将 input image 填充为正方形
def fill_image(image):width, height = image.size#选取长和宽中较大值作为新图片的new_image_length = width if width > height else height#定义边长为5000的倍数,将图像作为5000像素的方块整数裁剪new_image_length = (int(new_image_length/5000) + 1) * 5000#生成新图片[白底]new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white') #注意这个函数!# #将之前的图粘贴在新图上,居中# if width > height:#原图宽大于高,则填充图片的竖直维度 #(x,y)二元组表示粘贴上图相对下图的起始位置,是个坐标点。# new_image.paste(image, (0, int((new_image_length - height) / 2)))# else:# new_image.paste(image, (int((new_image_length - width) / 2),0))# 将原来的图像贴在新的白底上return new_imagedef cut_image(image):width, height = image.sizeitem_width = int(width / 3) #因为朋友圈一行放3张图。box_list = []# (left, upper, right, lower)for i in range(0,3):for j in range(0,3):#打印切割后尺寸print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)box_list.append(box)image_list = [image.crop(box) for box in box_list]return image_list#保存
def save_images(image_list):index = 1for image in image_list:image.save(str(index) + '.png', 'PNG')index += 1if __name__ == '__main__':file_path = r"G:\DataSets\satellite-images-from-school\images\20AUG28032154-2AS-013425282010_01_P001_RAW_psh.jpg" #图片保存的地址image = Image.open(file_path)#image.show()image_new = fill_image(image)image_list = cut_image(image_new)save_images(image_list)
这篇关于python-对超大遥感图像进行裁剪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!