裁剪圖像代碼,將一張大圖裁剪爲多個小圖,可以重複裁剪
# region 圖像拆分代碼
def imgs_divide(divide_num, imgs_path, imgs_divide_path, dst_size):
'''
將單張圖片裁剪出多個不同圖片
:param divide_num: 1個輸入圖片裁剪出的樣本圖片個數
:param imgs_path: 輸入圖片的文件夾路徑
:param imgs_divide_path: 輸出樣本圖片的文件夾路徑
:param dst_size: 輸出樣本/裁剪尺寸
:return:
'''
def img_divide(img, img_name, divide_num, save_path, out_size):
'''
裁剪圖片,原始尺寸4N*4N,目標尺寸N*N,本文有3種方案:
按照4*4,無重複裁剪,得到16個樣本
按照4*4+3*3,在橫縱方向各偏移0.5N距離,得到16+9個樣本
按照4*4+3*3+3*4+4*3,在橫縱方向各偏移0.5N距離,在橫向偏移0.5N距離縱向不偏移,在縱向偏移0.5N距離橫向不偏移,得到16+9+12+12個樣本
:param img:
:param img_name:
:param divide_num:
:param save_path:
:param out_size:
:return:
'''
if divide_num == 16:
# 4*4
for i in range(4):
for j in range(4):
dst = np.array(img[out_size * j:out_size * (j + 1), out_size * i:out_size * (i + 1)])
dst_name = nameAdd(img_name, str(i * 4 + j).zfill(2))
tif.imwrite(save_path + dst_name, dst)
elif divide_num == 25:
diff = int(out_size * 0.5)
# 4*4
for i in range(4):
for j in range(4):
dst = np.array(img[out_size * j:out_size * (j + 1), out_size * i:out_size * (i + 1)])
dst_name = nameAdd(img_name, str(i * 4 + j).zfill(2))
tif.imwrite(save_path + dst_name, dst)
# 3*3
for i in range(3):
for j in range(3):
dst = np.array(
img[diff + out_size * j:diff + out_size * (j + 1),
diff + out_size * i:diff + out_size * (i + 1)])
dst_name = nameAdd(img_name, str(i * 3 + j + 16).zfill(2)) #保存序號增大
tif.imwrite(save_path + dst_name, dst)
elif divide_num == 49:
diff = int(out_size * 0.5)
# 4*4
for i in range(4):
for j in range(4):
dst = np.array(img[out_size * j:out_size * (j + 1), out_size * i:out_size * (i + 1)])
dst_name = nameAdd(img_name, str(i * 4 + j).zfill(2))
tif.imwrite(save_path + dst_name, dst)
# 3*3
for i in range(3):
for j in range(3):
dst = np.array(
img[diff + out_size * j:diff + out_size * (j + 1),
diff + out_size * i:diff + out_size * (i + 1)])
dst_name = nameAdd(img_name, str(i * 3 + j + 16).zfill(2)) #保存序號增大
tif.imwrite(save_path + dst_name, dst)
# 4*3
for i in range(4):
for j in range(3):
dst = np.array(
img[diff + out_size * j:diff + out_size * (j + 1), out_size * i:out_size * (i + 1)])
dst_name = nameAdd(img_name, str(i * 3 + j + 25).zfill(2)) #保存序號增大
tif.imwrite(save_path + dst_name, dst)
# 3*4
for i in range(3):
for j in range(4):
dst = np.array(
img[out_size * j:out_size * (j + 1), diff + out_size * i:diff + out_size * (i + 1)])
dst_name = nameAdd(img_name, str(i * 4 + j + 37).zfill(2)) #保存序號增大
tif.imwrite(save_path + dst_name, dst)
imgs = os.listdir(imgs_path)
for img_name in imgs:
img = tif.imread(imgs_path + img_name)
img_divide(img, img_name, divide_num, imgs_divide_path, dst_size)
print( '%s: %d---->%s: %d\n'% (imgs_path,len(os.listdir(imgs_path)),imgs_divide_path,len(os.listdir(imgs_divide_path))))
# endregion