批量对语义分割的图片和mask同时重叠分块,并处理不能整除的patch

上一篇参考其他博主的代码,实现了批量crop图片和mask,但是没有对图片大小不能整除size的情况进行处理,所以进行改进。

加入了长宽的判断条件,使用opencv对大小不满足设定的size的patch进行填充,最后得到相同size的patch,主要使用cv2.copyMakeBorder方法,如果需要其他填充,可以查查官方文档

代码如下:

import cv2
import math
import os
import numpy as np

from pathlib import Path

file_path = "/xxx/img/"  #原图路径
gt_path = "/xxx/seg/gt_img/"  #mask路径
save_path = '/xxx/crop_images'   #原图crop后保存路径
save_gt_path = '/xxx/crop_gt'  # mask crop后保存路径
Path(save_path).mkdir(parents=True, exist_ok=True)
Path(save_gt_path).mkdir(parents=True, exist_ok=True)

for filename in os.listdir(file_path):

    # crop的size
    height = 512
    width = 512

    # overlap大小
    over_x = 128
    over_y = 128
    h_val = height - over_x
    w_val = width - over_y

    # 设置是否丢弃不符合大小的图像
    mandatory = False

    img = cv2.imread(file_path + filename,1) #原图按照3通道彩色读入
    gt_img = cv2.imread(gt_path + filename,0) #mask按照灰度图单通道读入
    print("img info :",filename, img.shape)
    print("gt info :",filename, gt_img.shape)
   
    # original image size
    original_height = img.shape[0]
    original_width = img.shape[1]

    max_row = float((original_height - height) / h_val) + 1
    max_col = float((original_width - width) / w_val) + 1

    
    max_row = math.ceil(max_row) if mandatory == False else math.floor(max_row)
    max_col = math.ceil(max_col) 
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值