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相关推荐

  1. 大杀器!攻克目标检测难点秘籍四,数据增强大法

    点击上方"AI算法修炼营",选择加星标或"置顶" 标题以下,全是干货 前面的话 在前面的秘籍一:模型加速之轻量化网络.秘籍二:非极大抑制算法和回归损失优化之路. ...

  2. 基于OpenCV做图像数据增强(平移、镜像、缩放、旋转、仿射)

    前言: 基于OpenCV的基本使用,对图像的数据量进行数据增强,使得框架对神经网络进行训练,提高模型的鲁棒性以及准确性. 原图: 1.平移 平移通过自定义平移矩阵以及函数warpAffine实现: 代 ...

  3. 机器视觉 OpenCV—python 数据增强

    一.前言 大家好,我之前做过图像分类或识别时,经常感慨数据集不够大,导致模型的准确度不够高,虽然用过一些图像增强的方法,也见过别人用过一些数据增强的方法,接下来主要统计一些常见的图像增强的方法. 作为 ...

  4. 使用卷积神经网络(普通CNN和改进型LeNet)以及数据增强和迁移学习技巧识别猫和狗,并制作成分类器软件(基于Keras)

    数据集:https://www.microsoft.com/en-us/download/confirmation.aspx?id=54765 猫和狗的图片各自有12500张. 第一步 整理数据集,查 ...

  5. 【OpenCv】图像的数据增强:HSV色彩空间介绍以及与BGR空间的转换

    一.HSV颜色模型介绍 HSV(Hue, Saturation, Value)是根据颜色的直观特性创建的一种颜色空间, 也称六角锥体模型.该模型中颜色的参数分别是色调(H).饱和度(S).明度(V). ...

  6. 用于半监督语义分割的基于掩码的数据增强

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...

  7. 深度学习和目标检测系列教程 9-300:TorchVision和Albumentation性能对比,如何使用Albumentation对图片数据做数据增强

    @Author:Runsen 上次对xml文件进行提取,使用到一个Albumentation模块.Albumentation模块是一个数据增强的工具,目标检测图像预处理通过使用"albume ...

  8. imgaug: 一个很有用的图像数据增强库

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 在深度学习项目中,寻找数据花费了相当多的时间.但在很多实际的项目中,我们难以找到充足的数据来完 ...

  9. 目标检测中的数据增强

    目标检测中的数据增强 技术标签: 深度学习 人工智能 一.图像遮挡 ①random erase 用随机值或训练集的平均像素替换图像区域. URL: https://arxiv.org/pdf/1708 ...

最新文章

  1. MATLAB寻址访问按什么优先,matlab笔记
  2. 信号相参性(相干性)(转)
  3. java在己有的类创子类怎么创_使用Java创建自己的异常子类
  4. 一个包的TcpServer流程
  5. 怎样成为一个好的技术领导者
  6. Redis主从、哨兵模式的搭建
  7. Unity3d开发跳一跳-郑洪智-专题视频课程
  8. php类知识点滴---类的实例化,构造函数,继承初步
  9. DataGrid分页;指定列的总和和平均值;显示鼠标背景色;弹出式窗口;
  10. ROS☞rosbag/rostopic消息记录、回放、转.txt
  11. python输出unicode字符_如何在Python中打印Unicode字符?
  12. 2021-2027全球与中国数控龙门镗铣床市场现状及未来发展趋势
  13. 深度分析:PSP3000被破解 狂欢?还是哀悼?
  14. Android自定义权限
  15. ROS教程之使用UVC摄像头
  16. 项目管理49个过程超详细总结(持续更新中)
  17. U盘_PE启动+U存储+kali三合一启动盘制作教程
  18. 中文.com域名如何申请 什么是.com域名过期
  19. 知名的网址导航网站及好用的网址导航分享
  20. 时间加减计算器_初级会计职称考试不让带计算器?!手把手教你使用机考系统计算器,再不看就晚了!...

热门文章

  1. 计算机控制中心系统结,车辆及人员卡口监控系统解决方案
  2. java:Map接口
  3. PMP证书含金量有多高?看完本文就知道!
  4. Andorid Studio 制作欢乐写数字(Timer启动+帧动画)
  5. python有什么用途视频_Python分析6625条视频,告诉你“打工人”凭什么能刷爆全网...
  6. 网络通信1 AIO 和 BIO和 NIO
  7. 八核机仅888元 各价位四核八核手机推荐
  8. 微信小程序=====》解决部分苹果机型屏幕无法滑动问题(底部黑条)
  9. java惊恐食人鱼游戏下载_恐怖食人鱼5中文无敌版下载_恐怖食人鱼5单机游戏下载_快吧单机游戏...
  10. 产业分析:虚拟偶像行业研究报告