欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

裁剪图像

程序员文章站 2022-03-24 19:59:10
...

裁剪图像代码,将一张大图裁剪为多个小图,可以重复裁剪

 

# 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