栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于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. 输入图像

  1. 批量剪裁后的图像

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号