基于python-opencv的模型数据集图像批量剪裁小工具

话不多说,直接上代码:

import cv2 as cv

filedir = r"../originalimg/" # 原始图像文件夹路径
m = 1 # 剪裁后图像的名字标号初始化

h,w = 720,1280 # 输入图像的原始尺寸,不知道的话可以print(cv.imread(随便一张图的路径).shape)看一下
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 # roi图像宽度索引的限制
        xr = x + expectw/2 if x + expectw/2 < w-1 else w-1
        yl = y - expecth/2 if y - expecth/2 > 0 else 0 # roi图像宽度索引的限制
        yr = y + expecth/2 if y + expecth/2 < h-1 else h-1
        coord.append([yl, yr, xl, xr]) # 储存到list

if __name__ == "__main__":
    for i in range(1, 50): # 文件名字序号迭代
    	coord = [] # roi图像索引容器
    	filepath = filedir + str(i) + ".jpg" # 读取图像的地址
    	image = cv.imread(filepath) # 读取图像
    	cv.namedWindow("image") # 生成图窗
    	cv.setMouseCallback("image", on_EVENT_LBUTTONDOWN) # 鼠标点击图窗中roi中心可以返回坐标
    	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]] # roi图像生成
        		cv.imwrite("../Testset/" + str(m) + ".jpg", pic_save) # 存储roi图像
        		m += 1 # 文件名字序号+1

实现效果:

  1. 输入图像

image-20220524235340648

  1. 批量剪裁后的图像

image-20220524235750766

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值