将语义分割图像先裁剪后拼接
裁剪:
from PIL import Image
img = Image.open('/home/dio/VSST/zqz/python_handle/image_cut/Remote_sensing_segmentation/top_potsdam_2_10_RGB.tif')
print('图片的大小为: {}'.format(img.size))
print('将图片切分成等四份,4张 1500 X 1500 的图片')
size = 3000 #图片大小都为600,所以只设置一个变量
left = 0 #图片距离左边的宽度乘积值
shang = 0 #图片距离上边的宽度乘积值
index = 0 #图片名
for i in range(4):
if i == 2:
shang += 1
left = 0
a = size * left # 图片距离左边的大小
b = size * shang # 图片距离上边的大小
c = size * (left + 1) # 图片距离左边的大小 + 图片自身宽度
d = size * (shang + 1) # 图片距离上边的大小 + 图片自身高度
print('a= {},b= {},c= {}, d= {}'.format(a,b,c,d))
croping = img.crop((a,b,c,d))
croping.save('/home/dio/VSST/zqz/python_handle/image_cut/cut/'+ str(index) + '.jpg')
index += 1
left += 1
拼接:
from PIL import Image
imgname = 0
def Splicing(imgs):
print('------------Splicing-------------')
target = Image.new('RGB', (size * 2, size * 1)) # 拼接前需要写拼接完成后的图片大小 1200*600
for i in range(len(imgs)):
a = size * i # 图片距离左边的大小
b = 0 # 图片距离上边的大小
c = size * (i + 1) # 图片距离左边的大小 + 图片自身宽度
d = size # 图片距离上边的大小 + 图片自身高度
target.paste(imgs[i], (a, b, c, d))
global imgname
print('拼接图片的路径为:', path1 + str(imgname) + '.jpg')
target.save(path1 + str(imgname) + '.jpg')
imgname += 1
def Overall_splicing():
print('------------Overall_splicing-------------')
# 取1,3是因为每行拼接完整都是最后那个,第一行是0,1命名,第二行是2,3命名,所以取后面那个值
imglist = [1, 3]
img = []
for i in imglist:
print('完整行的拼接路径为:' + path1 + str(i) + '.jpg')
img.append(Image.open(path1 + str(i) + '.jpg'))
target = Image.new('RGB', (size * 2, size * 2)) # 拼接前需要写拼接完成后的图片大小 6000*6000
for i in range(len(img)):
a = 0 # 图片距离左边的大小
b = size * i # 图片距离上边的大小
c = size * 2 # 图片距离左边的大小 + 图片自身宽度
d = size * (i + 1) # 图片距离上边的大小 + 图片自身高度
target.paste(img[i], (a, b, c, d))
global imgname
target.save(path1 + 'Splicing' + '.jpg')
if __name__ == '__main__':
size = 3000 # 图片的宽高都为3000像素
path = '/home/dio/VSST/zqz/python_handle/image_cut/cut/' # 存放要拼接图片的目录
path1 = '/home/dio/VSST/zqz/python_handle/image_cut/concat/' # 拼接后图片的存放目录
index = 0 # 图片的名字
for i in range(2): # 有两行,所以需要循环两次
images = [] # 每一次拼接只能一行一行拼接,不能在第一行拼接完后再在其基础上拼接第二行的图片,矩阵不允许这样操作
for j in range(2): # 每行有两张图片,所以也要循环两次
print(path + str(index) + '.jpg')
images.append(Image.open(path + str(index) + '.jpg'))
index += 1
print('第 {} 行拼接完成'.format(i))
Splicing(images)
Overall_splicing()