在博客AlexNet原理及tensorflow实现训练神经网络的时候,做了数据增强,对图片的处理采用的是PIL(Python Image Library), PIL是Python常用的图像处理库.

下面对PIL中常用到的操作进行整理:
1. 改变图片的大小

from PIL import Image, ImageFont, ImageDrawdef image_resize(image, save, size=(100, 100)):""":param image:  原图片 :param save:   保存地址:param size:    大小:return: """image = Image.open(image)   # 读取图片image.convert("RGB")re_sized = image.resize(size, Image.BILINEAR)  # 双线性法re_sized.save(save)   # 保存图片return re_sized

2. 对图片进行旋转:

from PIL import Image, ImageFont, ImageDraw
import matplotlib.pyplot as pltdef image_rotate(image_path, save_path, angle):"""对图像进行一定角度的旋转:param image_path:  图像路径:param save_path:   保存路径:param angle:       旋转角度:return:"""image = Image.open(image_path)image_rotated = image.rotate(angle, Image.BICUBIC)image_rotated.save(save_path)return image_rotated

3. 对图片进行左右反转:

from PIL import Image, ImageFont, ImageDraw
import matplotlib.pyplot as pltdef image_flip(image_path, save_path):"""图图象进行左右反转:param image_path::param save_path::return:"""image = Image.open(image_path)image_transpose = image.transpose(Image.FLIP_LEFT_RIGHT)   # Image.FLIP_TOP_BOTTOM 上下反转image_transpose.save(save_path)return image_transpose

4. 对图像进行裁剪:

from PIL import Image, ImageFont, ImageDraw
import matplotlib.pyplot as pltdef image_crop(image_path, save_path, crop_region):"""对图像进行裁剪:param image_path::param save_path::param crop_region:  裁剪的区域  crop_window=(x_min, y_min, x_max, y_max):return:"""image = Image.open(image_path)image_crop = image.crop(crop_region)  # (width_min, height_min, width_max, height_max) 图像的原点是在左上角image_crop.save(save_path)return image_crop

5. 在图片上添加文字

from PIL import Image, ImageFont, ImageDraw
import matplotlib.pyplot as pltdef image_title(image_path, save_path, font_pos, font_size, text):"""对图像添加文字:param image_path::param save_path::param font_pos:   文字位置(x, y):param font_size:  文字大小:param text:        文字内容:return:"""image = Image.open(image_path)font = ImageFont.truetype(font=r"C:\Windows\Fonts\Times New Roman\times.ttf", size=font_size)draw = ImageDraw.Draw(image)draw.text(xy=font_pos, text=text, fill=(255, 0, 0), font=font)image.save(save_path)return image

除以上之外,数据增强的方法还有对图像颜色进行抖动,和对图像进行高斯噪声处理

1. 颜色抖动:

from PIL import Image, ImageFont, ImageDraw, ImageEnhance
import matplotlib.pyplot as plt
import numpy as npdef image_color(image_path, save_path):"""对图像进行颜色抖动:param image_path::param save_path::return:"""image = Image.open(image_path)print(type(image))random_factor = np.random.randint(low=0, high=31) / 10.0        # 随机的扰动因子color_image = ImageEnhance.Color(image).enhance(random_factor)    # 调整图像的饱和度random_factor = np.random.randint(low=10, high=21) / 10.0bright_image = ImageEnhance.Brightness(color_image).enhance(random_factor)   # 调整图像的亮度random_factor = np.random.randint(low=10, high=21) / 10.0contrast_image = ImageEnhance.Contrast(bright_image).enhance(random_factor)  # 调整图像的对比度random_factor = np.random.randint(low=0, high=31) / 10.0sharp_image = ImageEnhance.Sharpness(contrast_image).enhance(random_factor)  # 调整图像的锐度sharp_image.save(save_path)return sharp_image

2.高斯噪声处理:

from PIL import Image, ImageFont, ImageDraw, ImageEnhance
import matplotlib.pyplot as plt
import numpy as np
import randomdef image_gauss(image_path, save_path, mean, stddev):"""对图像进行颜色抖动:param image_path::param save_path::return:"""def gaussNoisy(pixel_array, mean, stddev):"""对图像的单个通道进行高斯噪声处理:param pixel_array::param mean:  均值:param stddev:  方差:return:"""for x in pixel_array:x += random.gauss(mean, stddev)return pixel_array# 对图像进行数据转换image = Image.open(image_path)image.convert("RGB")img = np.asarray(image)   # 将PIL中的数据格式转化为arrayimg.flags.writeable = True    # 将数组改为读写模式width, height = img.shape[: 2]img_r = img[:, :, 0].flatten()img_g = img[:, :, 1].flatten()img_b = img[:, :, 2].flatten()img_r_new = gaussNoisy(pixel_array=img_r, mean=mean, stddev=stddev)img_g_new = gaussNoisy(pixel_array=img_g, mean=mean, stddev=stddev)img_b_new = gaussNoisy(pixel_array=img_b, mean=mean, stddev=stddev)img[:, :, 0] = img_r_new.reshape([width, height])img[:, :, 1] = img_g_new.reshape([width, height])img[:, :, 2] = img_b_new.reshape([width, height])image_new = Image.fromarray(np.uint8(img))    # 将array中的数据格式转化为PIL中的数据格式image_new.save(save_path)    return image_new

Python PIL库处理图片常用操作,图像识别数据增强的方法相关推荐

  1. python excel库pip install_超全整理|Python 操作 Excel 库 xlwings 常用操作详解!

    原标题:超全整理|Python 操作 Excel 库 xlwings 常用操作详解! 来源:早起Python 作者:陈熹.刘早起 大家好,我是早起. 在之前的文章中我们曾详细的讲解了如何使用openp ...

  2. pillow是python的图像处理标准库_详解Python图像处理库Pillow常用使用方法

    pil(python image library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:pil. pil ...

  3. python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤

    字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括: ...

  4. pillow属于python标准库吗_详解Python图像处理库Pillow常用使用方法

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:PIL. PIL ...

  5. python数据处理常用函数_Python中常用操作字符串的函数与方法总结

    Python中常用操作字符串的函数与方法总结 这篇文章主要介绍了Python中常用操作字符串的函数与方法总结,包括字符串的格式化输出与拼接等基础知识,需要的朋友可以参考下 例如这样一个字符串 Pyth ...

  6. python实现目标检测voc格式标签数据增强

    文章目录 前言 一.显示图片(可关闭) 二.创建图像变换的类 1.增强数据代码 2.图像加噪声 3.调整图像亮度 4.添加黑色像素块 5.旋转图像 6.图像裁剪 7.平移图像 8.图像镜像 9.图像随 ...

  7. Py之pdfkit:python的库之pdfkit简介、安装、使用方法详细攻略

    Py之pdfkit:python的库之pdfkit简介.安装.使用方法详细攻略 目录 pdfkit简介 pdfkit安装 pdfkit使用方法 pdfkit简介 pdfkit,把HTML+CSS格式的 ...

  8. python简介pdf_Py之pdfkit:python的库之pdfkit简介、安装、使用方法详细攻略

    Py之pdfkit:python的库之pdfkit简介.安装.使用方法详细攻略 目录 pdfkit简介 pdfkit,把HTML+CSS格式的文件转换成PDF格式文档的一种工具.它就是html转成pd ...

  9. 目标检测:python实现多种图像数据增强的方法(光照,对比度,遮挡,模糊)

    图像数据增强的内容(可根据需要自定义选择): 1.直方图均衡化 2.clahe自适应对比度直方图均衡化 3.白平衡 4.亮度增强 5.亮度,饱和度,对比度增强 6.去除图像上的高光部分 7.自适应亮度 ...

最新文章

  1. VBA 里面注册dll
  2. 也读《人月神话》:没有银弹的软件工程
  3. 10人以下小团队管理手册-学习笔记
  4. java开发中实际遇到的问题总结_内行总结:装修中最容易遇到的16个问题及其解决方式!...
  5. c++ map 函数
  6. c# sha1签名 微信_C#微信公众号JS接口签名算法
  7. Docker 从入门到掉坑
  8. django小结191107
  9. IDEA打开clone的项目编译时出现java: 程序包org.springframework.boot不存在。
  10. 华为机试HJ27:查找兄弟单词
  11. CSS webkit
  12. 关于三角函数图像的思考
  13. https原理:证书传递、验证和数据加密、解密过程解析
  14. linux hook技术
  15. 各种音视频编解码学习详解之 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2
  16. 在屏幕的任意位置拖拽,控制精灵移动
  17. 2021年一次比较奇葩的 AWS 面试
  18. 碳基计算机电路,碳基CMOS集成电路技术
  19. ubuntu换源 树莓派
  20. ORACLE经验汇总

热门文章

  1. 持续集成部署Jenkins工作笔记0001---持续集成、持续部署、持续交付的概念
  2. STM32工作笔记001---认识开发板资源-以正点原子战舰版开发板为例
  3. mysql操作符_MySql 中的=操作符
  4. xcode java mac_mac 下常用命令(xcode常用命令,环境相关等)
  5. c语言如何实现全部参数加9,从C语言到汇编(九)函数参数
  6. python tk combobox设置值为空_Python编程从入门到实践日记Day24
  7. 标准c语言与c51的区别,单片机学习笔记5-C51语言与标准C语言的比较
  8. android udt协议,接口和软件包  |  Android 开源项目  |  Android Open Source Project
  9. php点击导入选择文件,关于怎么选定一个文件并打开的有关问题
  10. mysql的area_GitHub - nszm/china_area_mysql: 中国5级行政区域mysql库