人脸图像明暗变换、高斯模糊变换


import os
import numpy as np
from PIL import Image
from PIL import ImageEnhance
import random
import cv2
    
    
def parseLines(line):
    if len(line) == 0:
        return 
    words = line.split(' ')
    inputimage = words[0]   
    points = np.zeros((10,))
    points[0]=float(words[1])   #x0
    points[1]=float(words[2])   #x1
    points[2]=float(words[3])   #x2
    points[3]=float(words[4])   #x3
    points[4]=float(words[5])   #x4
    points[5]=float(words[6])   #y0
    points[6]=float(words[7])   #y1
    points[7]=float(words[8])   #y2
    points[8]=float(words[9])   #y3
    points[9]=float(words[10])  #y4
    
    return inputimage, points
    

def Gaussblur(imgpath, imgname, points, labelfile, gaussNum):
    #高斯模糊,高斯核越大,图像越模糊
    fid = open(labelfile, 'a')    #追加
    nickname = imgname.split('.')[0] #去除后缀的图像名
    fullpath = imgpath + imgname
    img = cv2.imread(fullpath)
    for i in range(gaussNum):
        scale = random.randrange(3, 7, 2) #高斯核必须是奇数 3 5 7
        img_ = cv2.GaussianBlur(img, ksize=(scale, scale), sigmaX=0, sigmaY=0)
        fullpath = '{}{}{}{}{}'.format(imgpath, nickname, '_gauss', str(i), '.jpg')
        cv2.imwrite(fullpath, img_)
        
        rename = '{}{}{}{}'.format(nickname, '_gauss', str(i), '.jpg')
        fid.write(rename + ' ')
        for ii in range(10):
            fid.write(str(points[ii]) + ' ')
        fid.write('\n')
        
def BrightEnhance(imgpath, imgname, points, labelfile, briNum):    
    #imgpath:训练图像保存路径
    #imgname:训练图像名称,如0.jpg
    #points:训练图像关键点,共10个
    #labelfile: 标签文件路径
    #transNum:亮度变换次数,一般为偶数,变暗transNum/2次,变亮transNum/2次
    fid = open(labelfile, 'a')    #追加
    fullpath = imgpath + imgname
    img = Image.open(fullpath)
    enh_bri = ImageEnhance.Brightness(img)
    count = 0 #用于计数扩充的图片
    augNum = int(briNum / 2) #变暗或变亮的图像数量
    nickname = imgname.split('.')[0] #去除后缀的图像名
    for i in range(augNum):
        scale1 = random.uniform(0.3, 0.6)
        img_bri = enh_bri.enhance(scale1)
        fullpath = '{}{}{}{}{}'.format(imgpath, nickname, '_bright', str(count), '.jpg')
        rename = '{}{}{}{}'.format(nickname, '_bright', str(count), '.jpg')
        #io.imsave(fullpath, img_bri)
        img_bri.save(fullpath)
        
        fid.write(rename + ' ')
        for ii in range(10):
            fid.write(str(points[ii]) + ' ')
        fid.write('\n')
        count = count + 1
        
        scale2 = random.uniform(1.5, 1.8)
        img_bri = enh_bri.enhance(scale2)
        fullpath = '{}{}{}{}{}'.format(imgpath, nickname, '_bright', str(count), '.jpg')
        rename = '{}{}{}{}'.format(nickname, '_bright', str(count), '.jpg')
        #io.imsave(fullpath, img_bri)
        img_bri.save(fullpath)
        fid.write(rename + ' ')
        for ii in range(10):
            fid.write(str(points[ii]) + ' ')
        fid.write('\n')
        count = count + 1
    fid.close()   
    
    
if __name__ == '__main__':
    source_path = 'G:/FacePoints/Transformed_image_rotate/' #训练图片保存路径
    filelist = 'G:/FacePoints/Transformed_image_rotate/train_trans.txt' #训练标签路径
    newlist = 'G:/FacePoints/Transformed_image_rotate/newlabel.txt' #新生成的图像标签路径
    
    brightNum = 2 # 明暗变换次数。要求为偶数,若2,则变暗一张,变亮一张
    gaussNum = 2  # 高斯模糊次数
    fs = open(filelist)
    lines = fs.readlines()
    fs.close()
    count = 0
    for line in lines:
        print('%dth\n', count)
        imgname, pts = parseLines(line)
        if len(imgname) == 0:
            continue
        #明暗
        BrightEnhance(source_path, imgname, pts, newlist, brightNum)
        #模糊
        Gaussblur(source_path, imgname, pts, newlist, gaussNum)
        count += 1
    

人脸关键点图像模糊与明暗变化程序。我用的人脸图像大小为40*40,一共检测5个关键点。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值