# -*-coding = utf-8 -*-
"""
1. Image_flip:翻转图片
2. Image_traslation:平移图片
3. Image_rotate:旋转图片
4. Image_noise:添加噪声
"""
import os
import cv2
import numpy as np
from random import choice
import randomdef Image_flip(img):""":param img:原始图片矩阵:return: 0-垂直; 1-水平; -1-垂直&水平"""if img is None:returnparas = [0, 1, -1]img_new = cv2.flip(img, choice(paras))return img_newdef Image_traslation(img):""":param img: 原始图片矩阵:return: [1, 0, 100]-宽右移100像素; [0, 1, 100]-高下移100像素"""paras_wide = [[1, 0, 100], [1, 0, -100]]paras_height = [[0, 1, 100], [0, 1, -100]]rows, cols = img.shape[:2]img_shift = np.float32([choice(paras_wide), choice(paras_height)])border_value = tuple(int(x) for x in choice(choice(img)))img_new = cv2.warpAffine(img, img_shift, (cols, rows), borderValue=border_value)return img_newdef Image_rotate(img):""":param img:原始图片矩阵:return:旋转中心,旋转角度,缩放比例"""rows, cols = img.shape[:2]rotate_core = (cols/2, rows/2)rotate_angle = [60, -60, 45, -45, 90, -90, 210, 240, -210, -240]paras = cv2.getRotationMatrix2D(rotate_core, choice(rotate_angle), 1)border_value = tuple(int(x) for x in choice(choice(img)))img_new = cv2.warpAffine(img, paras, (cols, rows), borderValue=border_value)return img_newdef Image_noise(img):""":param img:原始图片矩阵:return: 0-高斯噪声,1-椒盐噪声"""paras = [0, 1]gaussian_class = choice(paras)noise_ratio = [0.05, 0.06, 0.08]if gaussian_class == 1:output = np.zeros(img.shape, np.uint8)prob = choice(noise_ratio)thres = 1 - prob#print('prob', prob)for i in range(img.shape[0]):for j in range(img.shape[1]):rdn = random.random()if rdn < prob:output[i][j] = 0elif rdn > thres:output[i][j] = 255else:output[i][j] = img[i][j]return outputelse:mean = 0var=choice([0.001, 0.002, 0.003])#print('var', var)img = np.array(img/255, dtype=float)noise = np.random.normal(mean, var**0.5, img.shape)out = img + noiseif out.min() < 0:low_clip = -1else:low_clip = 0out = np.clip(out, low_clip, 1.0)out = np.uint8(out*255)return outif __name__ == "__main__":"""path_read: 读取原始数据集图片的位置;path_write:图片扩增后存放的位置;picture_size:图片之后存储的尺寸;enhance_hum: 需要通过扩增手段增加的图片数量"""path_read = "D:/pic_old/"path_write = "D:/pic_new/"enhance_num = 500image_list = [x for x in os.listdir(path_read)]existed_img = len(image_list)while enhance_num > 0:img = choice(image_list)image = cv2.imread(path_read+img, cv2.IMREAD_COLOR)algorithm = [1, 2, 3, 4]random_process = choice(algorithm)if random_process == 1:image = Image_flip(image)elif random_process == 2:image = Image_traslation(image)elif random_process == 3:image = Image_rotate(image)else:image = Image_noise(image)image_dir = path_write+str(enhance_num+existed_img-1).zfill(5)+'.jpg'cv2.imwrite(image_dir, image)enhance_num -= 1

这个代码是这位博主的https://blog.csdn.net/Celibrity/article/details/106297733

我直接复制过来了,为了防止侵权,放上这位博主的链接

深度学习数据集扩充代码相关推荐

  1. 【HSI】高光谱的数据集分类深度学习实战及代码理解

    [HSI]高光谱的数据集分类深度学习实战及代码理解 文章目录 [HSI]高光谱的数据集分类深度学习实战及代码理解 一.配置文件编写 二.高光谱图像的处理 2.1图像数据变换 2.2 数据整合 2.3 ...

  2. 深度学习数据集定义与加载

    深度学习数据集定义与加载 深度学习模型在训练时需要大量的数据来完成模型调优,这个过程均是数字的计算,无法直接使用原始图片和文本等来完成计算.因此与需要对原始的各种数据文件进行处理,转换成深度学习模型可 ...

  3. java编程石头剪刀布图片_石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源...

    原标题:石头.剪刀.布!10分钟带你打开深度学习大门,代码已开源 沉沉 发自 宇宙中心 量子位 出品 | 公众号 QbitAI 深度学习技术的不断普及,越来越多的语言可以用来进行深度学习项目的开发,即 ...

  4. 捡漏!用谷歌图片搜索自制深度学习数据集 | 教程

    铜灵 编译整理 量子位 出品 | 公众号 QbitAI 就怕前脚刚立志搞个新研究,后脚就发现没有合适的数据集可用.AI工程师从入门到放弃,可能就是这么一会的功夫. 别找了,现在深度学习数据集也能自制了 ...

  5. 深度学习数据集怎么找?

    人工智能的无名英雄就是数据,许多许多标注或未标注的数据.研究部门和公司也都认识到数据民主化是加快人工智能的必要步骤.事实上,我们很难用一篇文章来说明哪些开放数据集是有用的,那么深度学习数据集怎么找?本 ...

  6. 六种人体姿态估计的深度学习模型和代码总结

    六种人体姿态估计的深度学习模型和代码总结 姿态估计的目标是在RGB图像或视频中描绘出人体的形状,这是一种多方面任务,其中包含了目标检测.姿态估计.分割等等.有些需要在非水平表面进行定位的应用可能也会用 ...

  7. 深度学习数据集标注工具、图像语料数据库等资源

    NLP+VS︱深度学习数据集标注工具.图像语料数据库.实验室搜索ing... 2017年02月07日 12:12:01 阅读数:27032 ~~因为不太会使用opencv.matlab工具,所以在找一 ...

  8. NLP+VS︱深度学习数据集标注工具、图像语料数据库、实验室搜索ing..

    一.NLP标注工具 来源:<构想:中文文本标注工具(附开源文本标注工具列表)> Chinese-Annotator   来源:https://github.com/crownpku/Chi ...

  9. NLP+VS︱深度学习数据集标注工具、图像语料数据库、实验室搜索ing....

    from: https://blog.csdn.net/sinat_26917383/article/details/54908389 一.NLP标注工具 来源:<构想:中文文本标注工具(附开源 ...

最新文章

  1. 美国研发出百万兆级计算机 Summit,“最强超算”竞争加剧
  2. jquery after append appendTo三个函数的区别
  3. QT的QDesignerMemberSheetExtension类的使用
  4. Spring mvc 文件上传
  5. vb全局热键的写法(占很少的资源)
  6. IO流介绍与File类
  7. (十四)Struts2 验证框架
  8. java为什么要连接Mysql_为什么要启动mysql workbech,java才能连接mysql数据库呢?
  9. Android飞机大战小游戏
  10. PowerPoint2007文件格式
  11. 悲剧!广电总局12月11日将封闭的网站目录!!!
  12. 试位法的matlab程序步骤,MATLAB程序设计导论简介,目录书摘
  13. 多种方法解决多个div并排显示的问题
  14. Linux下自动重启系统
  15. 通过netd获取网卡的IP地址和硬件mac地址
  16. 啊!啊!啊!IEEE754移码偏移值的127!
  17. python 中文名称文件保存
  18. jsplumb插件学习--单个节点添加多个锚点
  19. [转]深入理解RunLoop
  20. 广西工学院2000级计算机系,潘盛辉(电子信息与控制工程系)老师 - 广西工学院 - 院校大全...

热门文章

  1. hdu 5465 树状数组
  2. java 下载pdf 苹果手机乱码
  3. 例题:用“ * ”打印出等腰三角形
  4. fatal error: module file '/Users/cylm/Library/Developer/Xcode/DerivedData/ModuleCache/35BFEUGU7C7G3/
  5. 考勤助手——第十二周工作总结
  6. 谈谈架构设计的八条原则
  7. OYO与OTA相爱还是相杀?
  8. Python黑客技术,攻击自动化
  9. 2018-11-08 微信小程序上做基于以太坊的区块链Dapp
  10. 豆瓣创始人杨勃(阿北)一篇日志 曝光豆瓣电影打分规则 简单粗暴