例如:一张图像我想 均匀分为9份,设置参数为3即可,代表高度与宽度都除3,就分成了9份。
如果无法整除,在拼接回原图时,会有几个像素的偏差。
import cv2
import os
def cut_image_1(image, n):
# 图像、总切分数= n * n
w, h, c = image.shape
w_1 = w / n # y
h_1 = h / n # x
# 截图误差 补偿(正数)
y_e, x_e = w - (int(w_1) * n), h - (int(h_1) * n)
save = 0
list_img = []
y1 = 0
y2 = int(w_1)
for i in range(n):
x1 = 0
x2 = int(h_1)
for j in range(n):
cut = image[y1:y2, x1:x2]
x1 = x1 + int(h_1)
x2 = x2 + int(h_1)
# save += 1
# cv2.imwrite(f'images_ce/{save}.png', cut)
list_img.append(cut)
y1 = y1 + int(w_1)
y2 = y2 + int(w_1)
return list_img, (y_e, x_e)
def cut_image_2(img_list, f):
if not img_list:
return
vconcat = []
hconcat = []
for i in range(len(img_list[0])):
hconcat.append(img_list[0][i])
if len(hconcat) % f == 0:
# 可多张拼接
hconcat_i = cv2.hconcat(hconcat) # 水平拼接
vconcat.append(hconcat_i)
hconcat = []
img = cv2.vconcat(vconcat) # 垂直拼接
print(img.shape)
# cv2.imwrite('images_ce/he.png', img)
return img
if __name__ == '__main__':
f = 3 # 原图 左右拆分几份,上下拆分几份
img_0 = cv2.imread("images_0/1.jpg")
img_list = cut_image_1(img_0, f)
img = cut_image_2(img_list, f)
# 文件夹 拆分 图像
# path = "F:/ce/FastestDet/images_0/"
#
# list_img_name = os.listdir(path)
# print(list_img_name)
# n = 0
# for img_i in range(len(list_img_name)):
#
# img = cv2.imread(path + list_img_name[img_i])
# img_list = cut_image(img, 3)
# for i in img_list[0]:
# n += 1
#
# cv2.imwrite(f'images_1_save/{n}.png', i)