当前位置:   article > 正文

基于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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

实现效果:

  1. 输入图像

image-20220524235340648

  1. 批量剪裁后的图像

image-20220524235750766

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/77477
推荐阅读
相关标签
  

闽ICP备14008679号