前言:

GAN的原理很简单,但是它有很多变体,如:DCGAN、CycleGAN、DeblurGAN等,它们也被用在不同地方,本文将用到DCGAN来生成头像图片,可以做到以假乱真的地步。

1.首先调用程序对图片进行标准化

代码如下:

from skimage import io,transform,color
import numpy as np

def convert_gray(f,**args):
"""
将彩色图片转换为灰度图片和调整大小,改变图像分辨率
:return:
"""
rgb = io.imread(f)
# gray = color.rgb2gray(rgb) #
dst = transform.resize(rgb, (96, 96)) # 由于在后期测试的时候用的图片尺寸是96x96 return dst

datapath='your train path'
str=datapath+'/*.jpg' #识别.jpg的图像
coll = io.ImageCollection(str,load_func=convert_gray)#批处理
for i in range(len(coll)):
io.imsave(r'your save paths'+np.str(i)+'.jpg',coll[i])

2.调用程序

  • 训练图像 代码只能引用DCGAN的github代码:carpedm20/DCGAN-tensorflow

  • 调用命令:

    python main.py --input_height 96 --input_width 96 --output_height 48 --output_width 48 --dataset faces --crop --train --epoch 300 --input_fname_pattern "*.jpg"

3. 切割图片

由于生成的图片是由64张小尺寸图片拼接成一整张的,故需要进行对图片切割。

切割代码如下:

# encoding:utf-8
from PIL import Image
import sys
import math
import os

def fill_image(image):
"""
将图片填充为正方形
:param image:
:return:
"""
width, height = image.size
#选取长和宽中较大值作为新图片的
new_image_length = width if width > height else height
#生成新图片[白底]
new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')
#将之前的图粘贴在新图上,居中
if width > height:#原图宽大于高,则填充图片的竖直维度
#(x,y)二元组表示粘贴上图相对下图的起始位置
new_image.paste(image, (0, int((new_image_length - height) / 2)))
else:
new_image.paste(image,(int((new_image_length - width) / 2),0))

return new_image


def cut_image(image,cut_num):
"""
切图
:param image:
:return:
"""
flag_value = int(math.sqrt(cut_num))
width, height = image.size
item_width = int(width / flag_value)
box_list = []
for i in range(0,flag_value):
for j in range(0,flag_value):
box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)
box_list.append(box)
image_list = [image.crop(box) for box in box_list]

return image_list


def save_images(image_list):
"""
保存
:param image_list:
:return:
"""
index = 1
dirs = './img_add/'
if not os.path.exists(dirs):
os.makedirs(dirs)
for image in image_list:
image.save(dirs+str(index) + '.png', 'PNG')
index += 1

def main(file_path,batch_size):

image = Image.open(file_path)
image = fill_image(image)
image_list = cut_image(image,batch_size)
save_images(image_list)

if __name__ == '__main__':
batch_size = 64
file_path = "train.png" # 图片路径
main(file_path,batch_size)

参考链接:https://blog.csdn.net/qq_34739497/article/details/79902356

最新文章

  1. ES6之数组扩展方法【一】(相当好用)
  2. 2016网络大事记 mark
  3. c#软件工程师笔试题
  4. VisualStudio 自动排版等 快捷键
  5. CSS3火焰文字特效制作教程
  6. 《JS权威指南学习总结--6.8对象的三个属性》
  7. 用GeneratedKeyHolder获得新建数据主键值
  8. 浅谈Spring的AOP实现-动态代理
  9. SQL---约束---add constraint方法添加约束
  10. css去除ios文本框默认圆角
  11. MySQL8.0.19主从环境搭建(CentOS7)
  12. php爬虫入门 - 登录抓取内容
  13. 2019年 十款Mac上必备的实用软件列表
  14. Linux端BaiduPCS-Go使用方法
  15. 1、html基础认识&常用标签(1)
  16. Linux内核分析——第八周学习笔记
  17. Sprint 1 Review & Daily Scrum - 11/18
  18. BZOJ.4816.[SDOI2017]数字表格(莫比乌斯反演)
  19. Java ArrayList源码剖析
  20. Mysql 存储过程-转载

热门文章

  1. C 语言入门第八章--C语言预处理命令
  2. docker进入交互界面
  3. NOIP2019 旅行
  4. [Qt5] 使用Qt设计器绘制主窗口
  5. Day11 - J - Brave Game HDU - 1846
  6. Solr与tomcat搭建(搭建好)
  7. LNMP一键安装包 PHP自动升级脚本
  8. Dubbo+zookeeper部署到tomcat上注意事项,遇到的问题,闪退,运行报错等
  9. python第三方库介绍
  10. java并发初探ReentrantWriteReadLock