话不多说,直接上代码:
import cv2 as cv
filedir = r"../originalimg/"
m = 1
h,w = 720,1280
expecth,expectw = 416,416
"""
一张大的图像想要被分割成多张小的图像作为训练集的输入
流程如下:
遍历文件夹内的图像文件
打开一张图像
鼠标点击roi区域
保存这张图像上的所有roi子图像像素索引
根据像素索引
生成期望尺寸的roi子图像
保存子图像到新的文件夹中
"""
def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
if event == cv.EVENT_LBUTTONDOWN:
xl = x - expectw/2 if x - expectw/2 > 0 else 0
xr = x + expectw/2 if x + expectw/2 < w-1 else w-1
yl = y - expecth/2 if y - expecth/2 > 0 else 0
yr = y + expecth/2 if y + expecth/2 < h-1 else h-1
coord.append([yl, yr, xl, xr])
if __name__ == "__main__":
for i in range(1, 50):
coord = []
filepath = filedir + str(i) + ".jpg"
image = cv.imread(filepath)
cv.namedWindow("image")
cv.setMouseCallback("image", on_EVENT_LBUTTONDOWN)
cv.imshow("image", image)
cv.waitKey(0)
print(coord)
"""此刻就可以在同一张大图像中找出自己所有想要的roi像素索引
找完后关闭此图像进入下面的for循环存储此图中所有新生成的roi图像"""
for id in range(0, len(coord)):
pic_save = image[coord[id][0]:coord[id][1], coord[id][2]:coord[id][3]]
cv.imwrite("../Testset/" + str(m) + ".jpg", pic_save)
m += 1
实现效果:
- 输入图像
- 批量剪裁后的图像