4-CNN-demo-0401-数据增强OpenCV
import cv2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl# 设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif'] = [u'simHei']
mpl.rcParams['axes.unicode_minus'] = Falsedef brightness_images(image):"""随机调节图片亮度:param image::return:"""# 颜色通道转换 BGR ----> HSV(Hue 色调, Saturation 饱和度 V 亮度) H=aB+bG+cRhsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)image1 = np.array(hsv, dtype=np.float64)random_bright = 0.5 + np.random.uniform() # 随机调亮 或者调暗的随机数生成print(random_bright)image1[:, :, 2] = image[:, :, 2] * random_bright# 对于大于255的 进行裁剪。image1[:, :, 2][image1[:, :, 2] > 255] = 255image1 = np.array(image1, dtype=np.uint8)rgb = cv2.cvtColor(image1, cv2.COLOR_HSV2RGB)return rgbdef trans_image(image, hori_range, vertical_range):"""实现平移 (线性变换):param image::param hori_range::param vertical_range::return:"""rows, cols, channels = image.shape# 定义平移量 tr_x 代表水平平移的量, tr_y 代表垂直平移的量tr_x = hori_range*np.random.uniform() - hori_range/2tr_y = vertical_range*np.random.uniform() - vertical_range/2# 构造仿射关系矩阵。trans_matrix = np.float32([[1, 0, tr_x], [0, 1, tr_y]])img_trans = cv2.warpAffine(image, trans_matrix, (cols, rows))image1 = np.array(img_trans, dtype=np.uint8)return image1def crop_img_and_resize(image):shape = image.shapeimage1 = image[100:shape[0], 0:shape[1]]# 需要重新resize 缩放new_col = 224new_row = 224image1 = cv2.resize(image1, (new_col, new_row), interpolation=cv2.INTER_AREA)return image1def flip_img(image, flip_mode):"""随机翻转:param image::param flip_mode::return:"""randomint_flip = np.random.randint(2)if randomint_flip==0:# flip_mode 0代表沿着x轴 翻转, 正数代表沿着y轴翻转, 负数沿着2根都翻转。image = cv2.flip(image, flip_mode)return imagedef rotation_img(image_src):"""随机旋转:param image_src::return:"""rows, cols = image_src.shape[:2]# 定义一个随机旋转的随机数rotation_randomint = np.random.randint(low=180)print(rotation_randomint)# 定义一个旋转映射的矩阵。rotate_M = cv2.getRotationMatrix2D((cols/2, rows/2), rotation_randomint, 1.0)rotated_img = cv2.warpAffine(image_src, rotate_M, (cols, rows), borderValue=[225, 225, 225])return rotated_imgdef random_rotated_img():img_origin = './images/4.jpg'img = cv2.imread(img_origin)rotated_img = rotation_img(img)fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片')b = fig.add_subplot(122)b.imshow(cv2.cvtColor(rotated_img, cv2.COLOR_BGR2RGB))b.set_title('随机旋转以后的')plt.show()def random_flip_img():"""执行随机翻转:return:"""img_origin = './images/4.jpg'img = cv2.imread(img_origin)flipped_img = flip_img(img, flip_mode=-1)fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片')b = fig.add_subplot(122)b.imshow(cv2.cvtColor(flipped_img, cv2.COLOR_BGR2RGB))b.set_title('随机翻转以后的')plt.show()def scale_img():img_origin = './images/2.jpg'img = cv2.imread(img_origin)resized_img = crop_img_and_resize(img)fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片')b = fig.add_subplot(122)b.imshow(cv2.cvtColor(resized_img, cv2.COLOR_BGR2RGB))b.set_title('随机裁剪并缩放以后的')plt.show()def vertical_hrizontal_shift():"""随机水平或者垂直移动图片:return:"""img_origin = './images/1.jpg'img = cv2.imread(img_origin)shifted_img = trans_image(img, hori_range=500, vertical_range=600)fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片')b = fig.add_subplot(122)b.imshow(cv2.cvtColor(shifted_img, cv2.COLOR_BGR2RGB))b.set_title('随机平移以后的')plt.show()def random_bright_img():"""执行随机调整图片亮度:return:"""img_origin = './images/3.jpg'img = cv2.imread(img_origin)brighted_img = brightness_images(img)# 定义一个画板fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)# 121的意思是: 整个画板分为 1行2列, a位于第一个位置。a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片')b = fig.add_subplot(122)b.imshow(brighted_img)b.set_title('调节亮度以后的')plt.show()def img_color_change():img_origin = './images/3.jpg'img = cv2.imread(img_origin) # cv2默认读入进来的格式 是 BGRrgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)hls = cv2.cvtColor(img, cv2.COLOR_BGR2HLS)# 定义一个画板fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)# 121的意思是: 整个画板分为 1行2列, a位于第一个位置。a = fig.add_subplot(231)a.imshow(img)a.set_title('原始图片')b = fig.add_subplot(232)b.imshow(rgb)b.set_title('rgb')c = fig.add_subplot(233)c.imshow(hsv)c.set_title('hsv')d = fig.add_subplot(234)d.imshow(gray, cmap='Greys')d.set_title('gray')e = fig.add_subplot(235)e.imshow(hls)e.set_title('hls')plt.show()if __name__ == '__main__':img_color_change()scale_img()for _ in range(3):random_bright_img()vertical_hrizontal_shift()random_flip_img()random_rotated_img()
D:\Anaconda\python.exe D:/AI20/HJZ/04-深度学习/3-CNN/20191207/04_数据增强opencv.py
1.156051257135442
57
0.8624181451842686
41
1.408784374768897
154Process finished with exit code 0
经过双系统测试,ubuntu16.04上中文乱码,
修改如下:
显示标题里加上了中文字体simhei-windows.ttf
# -*- coding: utf-8 -*-import cv2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl# # 设置字符集,防止中文乱码
# mpl.rcParams['font.sans-serif'] = [u'simHei']
# mpl.rcParams['axes.unicode_minus'] = False
zhfont = mpl.font_manager.FontProperties(fname=r'/home/hjz/PycharmProjects/lianxi/11_tensorflow1.4.0/datas/fashion_mnist/SimHei-windows.ttf')# 随机调节图片亮度
def brightness_images(image):"""随机调节图片亮度:param image::return:"""# 颜色通道转换 BGR ----> HSV(Hue 色调, Saturation 饱和度 V 亮度) H=aB+bG+cRhsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)image1 = np.array(hsv, dtype=np.float64)random_bright = 0.5 + np.random.uniform() # 随机调亮 或者调暗的随机数生成# print(random_bright)image1[:, :, 2] = image[:, :, 2] * random_bright# 对于大于255的 进行裁剪。image1[:, :, 2][image1[:, :, 2] > 255] = 255image1 = np.array(image1, dtype=np.uint8)rgb = cv2.cvtColor(image1, cv2.COLOR_HSV2RGB)return rgb# 实现平移 (线性变换)
def trans_image(image, hori_range, vertical_range):"""实现平移 (线性变换):param image::param hori_range::param vertical_range::return:"""rows, cols, channels = image.shape# 定义平移量 tr_x 代表水平平移的量, tr_y 代表垂直平移的量tr_x = hori_range*np.random.uniform() - hori_range/2tr_y = vertical_range*np.random.uniform() - vertical_range/2# 构造仿射关系矩阵。trans_matrix = np.float32([[1, 0, tr_x], [0, 1, tr_y]])img_trans = cv2.warpAffine(image, trans_matrix, (cols, rows))image1 = np.array(img_trans, dtype=np.uint8)return image1#裁剪和缩放
def crop_img_and_resize(image):shape = image.shapeimage1 = image[100:shape[0], 0:shape[1]]# 需要重新resize 缩放new_col = 224new_row = 224image1 = cv2.resize(image1, (new_col, new_row), interpolation=cv2.INTER_AREA)#使用像素区域关系进行重采样return image1# 随机翻转
def flip_img(image, flip_mode):"""随机翻转:param image::param flip_mode::return:"""randomint_flip = np.random.randint(2)if randomint_flip==0:# flip_mode 0代表沿着x轴 翻转, 正数代表沿着y轴翻转, 负数沿着2根都翻转。image = cv2.flip(image, flip_mode)return image# 随机旋转
def rotation_img(image_src):"""随机旋转:param image_src::return:"""rows, cols = image_src.shape[:2]# 定义一个随机旋转的随机数rotation_randomint = np.random.randint(low=180)print(rotation_randomint)# 定义一个旋转映射的矩阵。rotate_M = cv2.getRotationMatrix2D((cols/2, rows/2), rotation_randomint, 1.0)rotated_img = cv2.warpAffine(image_src, rotate_M, (cols, rows), borderValue=[225, 225, 225])return rotated_img# 随机旋转-可视化
def random_rotated_img():img_origin = '/home/hjz/PycharmProjects/lianxi/01_FaceDetection/liuyifei.jpeg'img = cv2.imread(img_origin)rotated_img = rotation_img(img)fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片',fontproperties=zhfont)b = fig.add_subplot(122)b.imshow(cv2.cvtColor(rotated_img, cv2.COLOR_BGR2RGB))b.set_title('随机旋转以后的',fontproperties=zhfont)plt.show()# 随机翻转-可视化
def random_flip_img():"""执行随机翻转:return:"""img_origin = '/home/hjz/PycharmProjects/lianxi/01_FaceDetection/yangchaoyue.jpeg'img = cv2.imread(img_origin)flipped_img = flip_img(img, flip_mode=-1)fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片',fontproperties=zhfont)b = fig.add_subplot(122)b.imshow(cv2.cvtColor(flipped_img, cv2.COLOR_BGR2RGB))b.set_title('随机翻转以后的',fontproperties=zhfont)plt.show()# 随机裁剪并缩放-可视化
def scale_img():img_origin = '/home/hjz/PycharmProjects/lianxi/01_FaceDetection/yangmi.jpg'img = cv2.imread(img_origin)resized_img = crop_img_and_resize(img)fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片',fontproperties=zhfont)b = fig.add_subplot(122)b.imshow(cv2.cvtColor(resized_img, cv2.COLOR_BGR2RGB))b.set_title('随机裁剪并缩放以后的',fontproperties=zhfont)plt.show()# 随机水平或者垂直移动-可视化
def vertical_hrizontal_shift():"""随机水平或者垂直移动图片:return:"""img_origin = '/home/hjz/PycharmProjects/lianxi/01_FaceDetection/zhaoliying3.jpg'img = cv2.imread(img_origin)shifted_img = trans_image(img, hori_range=500, vertical_range=600)fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片',fontproperties=zhfont)b = fig.add_subplot(122)b.imshow(cv2.cvtColor(shifted_img, cv2.COLOR_BGR2RGB))b.set_title('随机平移以后的',fontproperties=zhfont)plt.show()# 随机调整图片亮度-可视化
def random_bright_img():"""执行随机调整图片亮度:return:"""img_origin = '/home/hjz/PycharmProjects/lianxi/01_FaceDetection/data/paonan.jpg'img = cv2.imread(img_origin)brighted_img = brightness_images(img)# 定义一个画板fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)# 121的意思是: 整个画板分为 1行2列, a位于第一个位置。a = fig.add_subplot(121)a.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))a.set_title('原始图片',fontproperties=zhfont)b = fig.add_subplot(122)b.imshow(brighted_img)b.set_title('调节亮度以后的',fontproperties=zhfont)plt.show()# 图像颜色变化-可视化
def img_color_change():img_origin = '/home/hjz/PycharmProjects/lianxi/01_FaceDetection/data/zhaoliying5.jpg'img = cv2.imread(img_origin) # cv2默认读入进来的格式 是 BGRrgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)hls = cv2.cvtColor(img, cv2.COLOR_BGR2HLS)# 定义一个画板fig = plt.figure(figsize=(8, 6)) # 代表宽 和高 (单位:英寸)# 121的意思是: 整个画板分为 1行2列, a位于第一个位置。a = fig.add_subplot(231)a.imshow(img)a.set_title('图片原始',fontproperties=zhfont)b = fig.add_subplot(232)b.imshow(rgb)b.set_title('rgb')c = fig.add_subplot(233)c.imshow(hsv)c.set_title('hsv')d = fig.add_subplot(234)d.imshow(gray, cmap='Greys')d.set_title('gray')e = fig.add_subplot(235)e.imshow(hls)e.set_title('hls')plt.show()if __name__ == '__main__':img_color_change()scale_img()for _ in range(3):random_bright_img()vertical_hrizontal_shift()random_flip_img()random_rotated_img()
4-CNN-demo-0401-数据增强OpenCV相关推荐
- 大杀器!攻克目标检测难点秘籍四,数据增强大法
点击上方"AI算法修炼营",选择加星标或"置顶" 标题以下,全是干货 前面的话 在前面的秘籍一:模型加速之轻量化网络.秘籍二:非极大抑制算法和回归损失优化之路. ...
- 基于OpenCV做图像数据增强(平移、镜像、缩放、旋转、仿射)
前言: 基于OpenCV的基本使用,对图像的数据量进行数据增强,使得框架对神经网络进行训练,提高模型的鲁棒性以及准确性. 原图: 1.平移 平移通过自定义平移矩阵以及函数warpAffine实现: 代 ...
- 机器视觉 OpenCV—python 数据增强
一.前言 大家好,我之前做过图像分类或识别时,经常感慨数据集不够大,导致模型的准确度不够高,虽然用过一些图像增强的方法,也见过别人用过一些数据增强的方法,接下来主要统计一些常见的图像增强的方法. 作为 ...
- 使用卷积神经网络(普通CNN和改进型LeNet)以及数据增强和迁移学习技巧识别猫和狗,并制作成分类器软件(基于Keras)
数据集:https://www.microsoft.com/en-us/download/confirmation.aspx?id=54765 猫和狗的图片各自有12500张. 第一步 整理数据集,查 ...
- 【OpenCv】图像的数据增强:HSV色彩空间介绍以及与BGR空间的转换
一.HSV颜色模型介绍 HSV(Hue, Saturation, Value)是根据颜色的直观特性创建的一种颜色空间, 也称六角锥体模型.该模型中颜色的参数分别是色调(H).饱和度(S).明度(V). ...
- 用于半监督语义分割的基于掩码的数据增强
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...
- 深度学习和目标检测系列教程 9-300:TorchVision和Albumentation性能对比,如何使用Albumentation对图片数据做数据增强
@Author:Runsen 上次对xml文件进行提取,使用到一个Albumentation模块.Albumentation模块是一个数据增强的工具,目标检测图像预处理通过使用"albume ...
- imgaug: 一个很有用的图像数据增强库
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 在深度学习项目中,寻找数据花费了相当多的时间.但在很多实际的项目中,我们难以找到充足的数据来完 ...
- 目标检测中的数据增强
目标检测中的数据增强 技术标签: 深度学习 人工智能 一.图像遮挡 ①random erase 用随机值或训练集的平均像素替换图像区域. URL: https://arxiv.org/pdf/1708 ...
最新文章
- MATLAB寻址访问按什么优先,matlab笔记
- 信号相参性(相干性)(转)
- java在己有的类创子类怎么创_使用Java创建自己的异常子类
- 一个包的TcpServer流程
- 怎样成为一个好的技术领导者
- Redis主从、哨兵模式的搭建
- Unity3d开发跳一跳-郑洪智-专题视频课程
- php类知识点滴---类的实例化,构造函数,继承初步
- DataGrid分页;指定列的总和和平均值;显示鼠标背景色;弹出式窗口;
- ROS☞rosbag/rostopic消息记录、回放、转.txt
- python输出unicode字符_如何在Python中打印Unicode字符?
- 2021-2027全球与中国数控龙门镗铣床市场现状及未来发展趋势
- 深度分析:PSP3000被破解 狂欢?还是哀悼?
- Android自定义权限
- ROS教程之使用UVC摄像头
- 项目管理49个过程超详细总结(持续更新中)
- U盘_PE启动+U存储+kali三合一启动盘制作教程
- 中文.com域名如何申请 什么是.com域名过期
- 知名的网址导航网站及好用的网址导航分享
- 时间加减计算器_初级会计职称考试不让带计算器?!手把手教你使用机考系统计算器,再不看就晚了!...
热门文章
- 计算机控制中心系统结,车辆及人员卡口监控系统解决方案
- java:Map接口
- PMP证书含金量有多高?看完本文就知道!
- Andorid Studio 制作欢乐写数字(Timer启动+帧动画)
- python有什么用途视频_Python分析6625条视频,告诉你“打工人”凭什么能刷爆全网...
- 网络通信1 AIO 和 BIO和 NIO
- 八核机仅888元 各价位四核八核手机推荐
- 微信小程序=====》解决部分苹果机型屏幕无法滑动问题(底部黑条)
- java惊恐食人鱼游戏下载_恐怖食人鱼5中文无敌版下载_恐怖食人鱼5单机游戏下载_快吧单机游戏...
- 产业分析:虚拟偶像行业研究报告