深度学习--离线数据增强

最近做项目遇见数据集背景非常单一,为了增加模型的返回能里,只能自己做一些数据增强来增加背景的多样性。代码如下:

import numpy as np
import cv2def create_mask(box, height, width):"""创建一个全零的掩码图像,目标区域是255(白色),北京是0(黑色):param box: 坐标框:param height: 图片高:param width: 图片宽:return:"""mask = np.zeros((height, width), dtype=np.uint8)# 在掩码图像上绘制矩形for b in box:x_min, y_min, x_max, y_max = bmask[y_min:y_max, x_min:x_max] = 255return maskdef blend_images_with_mask(image1, image2, mask, alpha=0.3, beta=0.7):""":param image1::param image2::param mask::param alpha::param beta::return:"""# 根据mask将目标从其中抠出来,除了目标区域其余都是0obj_masked = cv2.bitwise_or(image1, image1, mask=mask)# 根据mask将image1和image2中目标位置删除置为0(目标区域是黑色)image1_masked = cv2.bitwise_and(image1, image1, mask=cv2.bitwise_not(mask))image2_masked = cv2.bitwise_and(image2, image2, mask=cv2.bitwise_not(mask))# image1和image2融合blended = cv2.addWeighted(image1_masked, alpha, image2_masked, beta, 0)# 将目标放回融合后图像对应位置result = cv2.bitwise_or(blended, obj_masked)return resultif __name__ == '__main__':# 示例用法image1 = cv2.imread('image1.jpg')  # 原图image2 = cv2.imread('image2.jpg')  # 背景图# 保证两张图shape一致,这里只是粗暴的直接resize成了一样尺寸,# TODO:后续可以实现使用等比例缩放,多余区域填灰条的方式resizeimage2 = cv2.resize(image2, image1.shape[:2][::-1], )# 假设box是一个形状为 (N, 4) 的 numpy 数组,每行代表一个目标的坐标 [x_min, y_min, x_max, y_max]# TODO:这里的数据是直接复制过来的,可以改为从文件中读取box = np.array([[958, 302, 1046, 416],[871, 316, 975, 464],[1626, 445, 1676, 551],])  # 两个目标的坐标# TODO:添加代码将image1原图整图移动,保证目标不总是出现在同一个位置# 向外扩展一些,多保留一些原图背景,不会显得太突兀# TODO:后续改成随机向外扩展,实现完整代码,包括外扩后边界检查roi_box = box + np.array([-50, -50, 50, 50])# 获取图像宽高img_h, img_w = image1.shape[:2]# 创建mask掩码mask = create_mask(roi_box, img_h, img_w)# 设置融合比例# TODO:设置成随机alpha = 0.2  # image1 的比例beta = 0.8  # image2 的比例# 进行图像融合result = blend_images_with_mask(image1, image2, mask, alpha, beta)cv2.namedWindow('Blended Image', 0)cv2.resizeWindow('Blended Image', 1920 // 2, 1080 // 2)# 显示结果cv2.imshow('Blended Image', result)cv2.waitKey(0)cv2.destroyAllWindows()

image1
image1
image2
image2
obj_mask
obj_mask
image1_masked
image1_masked述
image2_masked
image2_masked
blended
blended
result
result

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第14届环境与农业工程国际会议(ICEAE 2024)即将召开!

2024年第14届环境与农业工程国际会议(ICEAE 2024)将于6月7日至9日在泰国曼谷召开。本次会议旨在促进环境与农业工程的研究和开发活动,共同探讨领域内最新以及具有根本性的进展突破。热忱欢迎从事相关领域研究的专家,学者和专业技术…

深入解析C++树形关联式容器:map、set及其衍生容器的使用与原理

文章目录 一、引言二、关联式容器的中的 paira.pair 的创建及使用b.pair 间的比较 三、 map 与 set 详解1. map 的基本操作2. set 的基本操作3.关联式容器的迭代器 四、 multimap 与 multiset 的特性五、关联式容器的使用技巧与注意事项1. 键值类型的选择与设计2. 自定义比较函…

微机综合保护测控装置在某电厂10.5kV厂用电系统改造中的应用

彭姝麟 Acrelpsl 0 引言 某电厂8号机组10.5kV厂用电系统分为两段,即V、VI段。正常工况下V、VI段分段运行,即联络断路器060处于断开位。V段由8GB经051断路器供电,同时还可由IV段047断路器供电(紧急备用电源)&#xff0…

CASA模型原理深度解析:揭示生态系统净初级生产力的奥秘

植被,作为陆地生态系统的重要基石,对维护生态环境功能具有不可替代的作用。其中,植被净初级生产力(NPP)是衡量植被生态系统健康与功能的关键指标。它反映了单位面积上绿色植被通过光合作用生产的有机质总量在扣除自养呼…

面试总结-刷题心得

结论先行,刷题策略:《代码随想录》的回溯、贪心、动态规划、二分、双指针 《算法图解》的动态规划 《剑指offer》全书 1 问题 我从校招找工作开始就有个痛点,动态规划,贪心算法,或者没有刷到过的回溯,都不…

走进AI新时代:织信低代码的实践与启示

最近 AIGC 很火,在各个领域都玩出了一些新花样。 比如在“低代码”领域,可以通过 AI 自动生成一个网站门户。 但这会带来开发效率的提升吗?如果 AI 能快速开发网站、APP等业务应用,那么 AI 生成能否完全取代低代码的可视化配置&a…

挑战杯 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习多目标跟踪 …

tigramite教程(六)使用TIGRAMITE 进行因果发现

使用TIGRAMITE 进行因果发现 基本用法简单玩玩万年不变的第一步:画出来调查数据依赖性和滞后函数PCMCI 因果发现错误发现率控制进一步相关的方法学教程 画图整合专家对链条的假设基准测试和验证因果效应估计数据集挑战滑动窗口分析 TIGRAMITE 是一个时间序列数据分析的python包…

目标检测——YOLOv2算法解读

论文:YOLO9000: Better, Faster, Stronger 作者:Joseph Redmon, Ali Farhadi 链接:https://arxiv.org/pdf/1612.08242v1.pdf 代码:http://pjreddie.com/yolo9000/ YOLO系列其他文章: YOLOv1通俗易懂版解读SSD算法解读…

视觉图像处理和FPGA实现第三次作业--实现一个加法器模块

一、adder模块 module adder(ina, inb, outa); input [5:0] ina ; input [5:0] inb ; output [6:0] outa ;assign outa ina inb; endmodule二、add模块 module add(a,b,c,d,e); input [5:0] a ; input [5:0] b ; input [5:…

git上拉下来的web项目,只有一个.git路径解决

代码拉下来的时候,web项目路径只有一个.git,可能指没有致命分支: 用idea打开web项目;切换到对应的分支即可

EEPROM ADDRESS BYTE长度说明

1、24C16 ADDRESS BYTE 2、24C32 ADDRESS BYTE 3、ADDRESS BYTE 长度说明 容量小于16Kbits(含)的EEPROM 地址是8位的 容量大于16Kbits的EEPROM地址是16位的 4、操作说明 例如:STM的HAL库函数中 HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi…