图像滑动窗口分割
copy
import cv2
import os
def sliding_window(image, stepSize, windowSize):
for y in range(0, image.shape[0], stepSize[1]):
for x in range(0, image.shape[1], stepSize[0]):
yield (x, y, image[y:y + windowSize[1], x:x + windowSize[0]])
def get_slice(image, stepSize, windowSize):
slice_sets = []
for (x, y, window) in sliding_window(image, stepSize, windowSize):
if window.shape[0] != windowSize[1] or window.shape[1] != windowSize[0]:
continue
slice = image[y:y + windowSize[1], x:x + windowSize[0]]
slice_sets.append(slice)
return slice_sets
if __name__ == '__main__':
dir_ = r'D:\DL_Code\dataset\season3_data\train'
dir_result_img = r'D:\DL_Code\dataset\season3_data\slide_result\img'
dir_result_mask = r'D:\DL_Code\dataset\season3_data\slide_result\mask'
if os.path.exists(dir_result_img)==False:
os.makedirs(dir_result_img)
if os.path.exists(dir_result_mask)==False:
os.makedirs(dir_result_mask)
file_list = os.listdir(dir_)
for file_ in file_list:
file_name = os.path.join(dir_,file_)
mask_file = file_name.replace('train', 'train_mask').replace('jpg', 'png')
image = cv2.imread(file_name)
mask_image = cv2.imread(mask_file)
w = image.shape[1]
h = image.shape[0]
(winW, winH) = (int(w/4),int(h/4))
stepSize = (int(w/8), int(h/8))
cnt = 0
for (x, y, window) in sliding_window(image, stepSize=stepSize, windowSize=(winW, winH)):
if window.shape[0] != winH or window.shape[1] != winW:
continue
slice_img = image[y:y+winH,x:x+winW]
slice_mask = mask_image[y:y+winH,x:x+winW]
mean_mask_value = slice_mask.mean()
if mean_mask_value==0.0:
save_name_img = os.path.join(dir_result_img,file_[:-4]+'_'+str(cnt)+'.png')
save_name_mask = os.path.join(dir_result_mask,file_[:-4]+'_'+str(cnt)+'.png')
cv2.imwrite(save_name_img,slice_img)
cnt+=1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步