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