图像随机裁剪代码实现

news2024/11/25 21:13:35

原理

在计算机视觉领域,深度学习模型通常需要大量的训练数据才能获得良好的性能。然而,在实际应用中,我们可能面临训练数据不足的问题。为了解决这一问题,可以使用数据增强技术来扩充数据集。随机图像裁剪是其中一种简单而有效的方法。

随机图像裁剪的原理很简单:从原始图像中随机选取一部分区域,然后将其裁剪出来作为新的图像样本。通过多次随机裁剪,我们可以得到多个不同的子图像,从而增加数据集的多样性。这种方法可以帮助模型学习到更多的局部特征和空间关系,提高模型的泛化能力。

Python实现解析

定义random_crop函数:
参数:
image_path: 要裁剪的图像的路径。
crop_height和crop_width: 裁剪后子图像的高度和宽度。
num_crops: 从一个图像中裁剪的子图像数量。
save_dir: 保存裁剪后子图像的目录。

函数内容:
从路径中读取图像并获取其尺寸。
确保图像的尺寸大于或等于要裁剪的尺寸。
如果保存目录不存在,则创建它。
对于每次裁剪,随机选择裁剪的起始点,并从原始图像中裁剪子图像。
将裁剪后的子图像保存到指定的目录中。
def random_crop(image_path, crop_height, crop_width, num_crops, save_dir):  
    # 读取图像  
    image = cv2.imread(image_path)  
    image_height, image_width, _ = image.shape  
    # 确保图像的尺寸大于要截取的尺寸  
    assert image_height >= crop_height and image_width >= crop_width, "Image size is smaller than the desired crop size."  
    # 如果保存目录不存在,则创建它  
    if not os.path.exists(save_dir):  
        os.makedirs(save_dir)  
        
    # 图像名称(不带扩展名)  
    base_name = os.path.splitext(os.path.basename(image_path))[0]  
        
    for i in range(num_crops):  
        # 随机选择截取的左上角点  
        x = random.randint(0, image_width - crop_width)  
        y = random.randint(0, image_height - crop_height)  
            
        # 进行截取  
        crop = image[y:y+crop_height, x:x+crop_width].copy()  
            
        # 保存截取的图像  
        save_path = os.path.join(save_dir, f"{base_name}_{i}.jpg")  # 你可以根据需要更改保存的文件格式  
        cv2.imwrite(save_path, crop)  
        print(f"Saved crop to {save_path}")  
        
    print(f"Finished cropping {num_crops} crops from {image_path}")  
  

以上为图像进行裁剪的核心代码,对大量的图像进行了裁剪,只需遍历图像所在的文件夹即可;

水平有限,有问题随时交流~

彩蛋

在这里插入图片描述
一个以AI算法与工程技术为核心的公众号,欢迎关注交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1332669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

03_排序

03_排序 一、简单排序Comparable接口介绍需求: 冒泡排序排序原理:冒泡排序API设计: 选择排序排序原理:选择排序API设计:选择排序的时间复杂度分析: 插入排序需求:排序原理:插入排序A…

C#中如何稳定精确地每隔5ms执行某个函数?

C#中如何稳定精确地每隔5ms执行某个函数? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C#的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家&#xf…

dockerfile创建镜像-----LNMP+wordpress

实验准备: dockerfile创建镜像 INMPwordpress nginx 172.111.0.10 docker-nginx mysql 172.111.0.20 docker-mysql php 172.111.0.30 docker-php cd /opt mkdir nginx mysql php cd nginx 把nginx和wordpress两个压缩包拖进来 vim nginx.conf…

代码随想录27期|Python|Day24|回溯法|理论基础|77.组合

图片来自代码随想录 回溯法题目目录 理论基础 定义 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。回溯函数也就是递归函数,指的都是一个函数。 基本问题 组合问题(无序&…

每日一题:LCR 095.最长公共子序列(DP)

题目描述: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些…

策略模式(组件协作模式)

策略模式(组件协作模式) 策略模式实例代码 注解 目的 正常情况下,一个类/对象中会包含其所有可能会使用的内外方法,但是一般情况下,这些常使用的类都是由不同的父类继承、组合得来的,来实现代码的复用&…

UnityHub无法打开项目问题,打开项目闪退回到hub界面

UnityHub无法打开项目问题,打开项目闪退回到hub界面 UnityHub启动项目闪烁unity界面之后立刻闪退到UnityHub界面情况一:这里这个问题我遇到了很多次情况都不太一样,我先说下我遇到的第一种问题也就是最好解决的一种。许可证到期导致闪退 情况…

计算机毕业设计-------JSP活动报名管理系统

项目介绍 本项目分为前后台,分为管理员与普通用户两种角色,管理员登录后台,普通用户登录前台; 管理员角色包含以下功能: 管理员登录,修改个人信息,报名管理,游客管理,活动管理,活动类型管理等功能。 用户角色包含以…

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…

LeetCode 1954. 收集足够苹果的最小花园周长:数学O(1)的做法

【LetMeFly】1954.收集足够苹果的最小花园周长:数学O(1)的做法 力扣题目链接:https://leetcode.cn/problems/minimum-garden-perimeter-to-collect-enough-apples/ 给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数…

关于“Python”的核心知识点整理大全39

目录 ​编辑 14.1.5 将 Play 按钮切换到非活动状态 game_functions.py 14.1.6 隐藏光标 game_functions.py game_functions.py 14.2 提高等级 14.2.1 修改速度设置 settings.py settings.py settings.py game_functions.py 14.2.2 重置速度 game_functions.py 1…

【动态规划算法】之打家劫舍Ⅱ

2.打家劫舍 II 和上一个比不同的就是,现在房屋围了一圈,第一个和最后一个相连 这道题目和198.打家劫舍 (opens new window)是差不多的,唯一区别就是成环了。 对于一个数组,成环的话主要有如下三种情况: 情况一&…

人工智能:从基础到前沿

人工智能:从基础到前沿 引言 当我们谈论“人工智能”(AI)时,我们其实是在谈论一个涵盖了众多学科、技术和应用的广阔领域。从计算机视觉到自然语言处理,从机器人学到深度学习,AI已经成为我们生活中不可或…

【OAuth2】授权框架的四种授权方式详解

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《OAuth 2》。🎯🎯 &#x1…

超维空间S2无人机使用说明书——21、VINS视觉定位仿真

引言:为了实现室内无人机的定位功能,S系列无人机配置了VINS-FUSION定位环境,主要包含了仿真跑数据集和实际操作部分。为了提前熟悉使用原理,可以先使用仿真环境跑数据集进行学习和理解 硬件:1080P显示器、Jetson orin…

PYQT的使用入门

上一章节:VSCode安装PYQT5-CSDN博客 QTDesigner初识 vscode导航栏右键,新建ui文件,弹出QT Designer。 完成创建后,可以在新窗口中进行UI布局。 QTDesigner左侧为组件库,中间为UI布局界面,右侧分别为对象…

Anylogic Pro 8.8.x for Mac / for Linux Crack

Digital twins – a step towards a digital enterprise AnyLogic是唯一一个支持创建模拟模型的方法的模拟建模工具:面向过程(离散事件)、系统动态和代理,以及它们的任何组合。AnyLogic提供的建模语言的独特性、灵活性和强大性使…

Redis数据库——键空间

一.服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每一个项都是一个redis.h/redisDb结构,每一个RedisDb结构代表一个数据库。 在初始化服务器时,程序会根据服务器状态的dbnum属性来…

喷淋实验--嵌入式实训

喷淋实验--嵌入式实训 1.MQTT通信原理 采集信息: 小程序/Linux 订阅者 1703161172612/AIOTSIM2APP 元宇宙 发布者 1703161172612/AIOTSIM2APP Linux订阅的主题是元宇宙发布的主题 控制设备: 小程序/Linux 发布者 1703161172612/APP2AIOTSIM 元宇宙 订阅者…

java并发编程八 CAS 与 volatile和原子整数与原子引用

文章目录 CAS 与 volatile慢动作分析volatile为什么无锁效率高CAS 的特点 原子整数原子引用不安全实现安全实现-使用锁安全实现-使用 CAS CAS 与 volatile 在java并发编程七六中,可以看到的 AtomicInteger 的解决方法,内部并没有用锁来保护共享变量的线…