Python?imgaug庫安裝與使用教程(圖片加模糊光雨雪霧等特效)
簡介
imgaug:機(jī)器學(xué)習(xí)實驗中的圖像增強(qiáng)庫,特別是卷積神經(jīng)網(wǎng)絡(luò)。支持以多種不同方式增強(qiáng)圖像、關(guān)鍵點/地標(biāo)、邊界框、熱圖和分割圖。
安裝
在anaconda prompt里進(jìn)行
pip install imgaug
看了幾篇文章,出錯的話可以先安裝依賴庫shapely
Overview
特效

Project 結(jié)構(gòu)

程序
圖片放入input

參考的源代碼(來源于網(wǎng)絡(luò))
main.py
# ###################源代碼####################
# !usr/bin/python
# -*- coding: utf-8 -*-
import cv2
from imgaug import augmenters as iaa
import os
# Sometimes(0.5, ...) 所有情況的 50% 中應(yīng)用給定的增強(qiáng)器
# e.g. Sometimes(0.5, GaussianBlur(0.3)) would blur roughly every second image.
sometimes = lambda aug: iaa.Sometimes(0.5, aug)
# 定義一組變換方法.
seq = iaa.Sequential([
# 選擇0到5種方法做變換
iaa.SomeOf((0, 5),
[
iaa.Fliplr(0.5), # 對50%的圖片進(jìn)行水平鏡像翻轉(zhuǎn)
iaa.Flipud(0.5), # 對50%的圖片進(jìn)行垂直鏡像翻轉(zhuǎn)
# superpixel representation 將一些圖像轉(zhuǎn)換為它們的超像素表示,每張圖像采樣 20 到 200 個超像素,但不要用它們的平均值替換所有超像素,只替換其中的一些(p_replace)。
sometimes(
iaa.Superpixels(
p_replace=(0, 1.0),
n_segments=(20, 200)
)
),
# Blur each image with varying strength using
# gaussian blur (sigma between 0 and 3.0),
# average/uniform blur (kernel size between 2x2 and 7x7)
# median blur (kernel size between 3x3 and 11x11).
iaa.OneOf([
iaa.GaussianBlur((0, 3.0)),
iaa.AverageBlur(k=(2, 7)),
iaa.MedianBlur(k=(3, 11)),
]),
# Sharpen each image, overlay the result with the original
# image using an alpha between 0 (no sharpening) and 1
# (full sharpening effect).
iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),
# Same as sharpen, but for an embossing effect.
iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),
# Add gaussian noise to some images.
# In 50% of these cases, the noise is randomly sampled per
# channel and pixel.
# In the other 50% of all cases it is sampled once per
# pixel (i.e. brightness change).
iaa.AdditiveGaussianNoise(
loc=0, scale=(0.0, 0.05 * 255)
),
# Invert each image's chanell with 5% probability.
# This sets each pixel value v to 255-v.
iaa.Invert(0.05, per_channel=True), # invert color channels
# Add a value of -10 to 10 to each pixel.
iaa.Add((-10, 10), per_channel=0.5),
# Add random values between -40 and 40 to images, with each value being sampled per pixel:
iaa.AddElementwise((-40, 40)),
# Change brightness of images (50-150% of original value).
iaa.Multiply((0.5, 1.5)),
# Multiply each pixel with a random value between 0.5 and 1.5.
iaa.MultiplyElementwise((0.5, 1.5)),
# Improve or worsen the contrast of images.
iaa.ContrastNormalization((0.5, 2.0)),
iaa.imgcorruptlike.Saturate(severity=3),
],
# do all of the above augmentations in random order
random_order=True
)
], random_order=True) # apply augmenters in random order
# 圖片文件相關(guān)路徑
path = './input/'
savedpath = './output/'
imglist = []
filelist = os.listdir(path)
# 遍歷要增強(qiáng)的文件夾,把所有的圖片保存在imglist中
for item in filelist:
img = cv2.imread(path + item)
# print('item is ',item)
# print('img is ',img)
# images = load_batch(batch_idx)
imglist.append(img)
# print('imglist is ' ,imglist)
print('all the picture have been appent to imglist')
# 對文件夾中的圖片進(jìn)行增強(qiáng)操作,循環(huán)10次
for count in range(10):
images_aug = seq.augment_images(imglist)
for index in range(len(images_aug)):
filename = str(count) + str(index) + '.jpg'
# 保存圖片
cv2.imwrite(savedpath + filename, images_aug[index])
print('image of count%s index%s has been writen' % (count, index))
簡易變換 試效果
test01.py
# ##############簡易變換#################
# https://imgaug.readthedocs.io/en/latest/source/overview_of_augmenters.html
import cv2
from imgaug import augmenters as iaa
import os
# Sometimes(0.5, ...) applies the given augmenter in 50% of all cases,
# e.g. Sometimes(0.5, GaussianBlur(0.3)) would blur roughly every second image.
# sometimes = lambda aug: iaa.Sometimes(0.5, aug)
# 定義一組變換方法.
seq = iaa.Sequential([
iaa.MotionBlur(k=15), # 運(yùn)動模糊
# iaa.Clouds(), # 云霧
# iaa.imgcorruptlike.Fog(severity=1), # 多霧/霜
# iaa.imgcorruptlike.Snow(severity=2), # 下雨、大雪
# iaa.Rain(drop_size=(0.10, 0.20), speed=(0.2, 0.3)), # 雨
# iaa.Rain(speed=(0.3, 0.5)), # 雨
# iaa.Snowflakes(flake_size=(0.6, 0.7), speed=(0.02, 0.03)), # 雪點
# iaa.imgcorruptlike.Spatter(severity=2), # 濺 123水滴、45泥
# iaa.contrast.LinearContrast((0.5, 2.0), per_channel=0.5),# 對比度變?yōu)樵瓉淼囊话牖蛘叨?
# iaa.imgcorruptlike.Brightness(severity=2), # 亮度增加
# iaa.imgcorruptlike.Saturate(severity=3), # 色彩飽和度
# iaa.FastSnowyLandscape(lightness_threshold=(100, 255),lightness_multiplier=(1.5, 2.0)), # 雪地 亮度閾值是從 uniform(100, 255)(每張圖像)和來自 uniform(1.5, 2.0)(每張圖像)的乘數(shù)采樣的。
# iaa.Cartoon(blur_ksize=3, segmentation_size=1.0, saturation=2.0, edge_prevalence=1.0), # 卡通
])
# 圖片文件相關(guān)路徑
path = './input/'
savedpath = './output_show/'
imglist = []
filelist = os.listdir(path)
# 遍歷要增強(qiáng)的文件夾,把所有的圖片保存在imglist中
for item in filelist:
img = cv2.imread(path + item)
# print('item is ',item)
# print('img is ',img)
# images = load_batch(batch_idx)
imglist.append(img)
# print('imglist is ' ,imglist)
print('all the picture have been appent to imglist')
# 對文件夾中的圖片進(jìn)行增強(qiáng)操作,循環(huán)1次
for count in range(1):
images_aug = seq.augment_images(imglist)
for index in range(len(images_aug)):
# filename = str(count) + str(index) + '.jpg'
# 保存圖片
filename = str(filelist[index])
cv2.imwrite(savedpath + filename, images_aug[index])
print('image of count%s index%s has been writen' % (count, index))
使用 模糊光雨雪霧
運(yùn)動模糊+雨雪霧天氣 2-3種
&
對比度 亮度 飽和度 選其一
my_augmentation.py
import cv2
from imgaug import augmenters as iaa
import os
# sometimes = lambda aug: iaa.Sometimes(0.5, aug) # 所有情況的 50% 中應(yīng)用給定的增強(qiáng)器
seq = iaa.Sequential([
# 選擇2到3種方法做變換
iaa.SomeOf((2, 3),
[
iaa.imgcorruptlike.MotionBlur(severity=(1, 2)), # 運(yùn)動模糊
# iaa.Clouds(), # 云霧
iaa.imgcorruptlike.Fog(severity=1), # 多霧/霜
# iaa.imgcorruptlike.Snow(severity=2), # 下雨、大雪
iaa.Rain(drop_size=(0.10, 0.15), speed=(0.1, 0.2)), # 雨
iaa.Snowflakes(flake_size=(0.1, 0.4), speed=(0.01, 0.03)), # 雪點
# iaa.FastSnowyLandscape(lightness_threshold=(100, 255),lightness_multiplier=(1.5, 2.0)), # 雪地 亮度閾值是從 uniform(100, 255)(每張圖像)和來自 uniform(1.5, 2.0)(每張圖像)的乘數(shù)采樣的。 這似乎產(chǎn)生了良好而多樣的結(jié)果。
# iaa.imgcorruptlike.Spatter(severity=5), # 濺 123水滴、45泥
# 對比度 亮度 飽和度 選其一
iaa.SomeOf((1, 1),
[
iaa.imgaug.augmenters.contrast.LinearContrast((0.5, 2.0), per_channel=0.5), # 對比度變?yōu)樵瓉淼囊话牖蛘叨?
iaa.imgcorruptlike.Brightness(severity=(1, 2)), # 亮度增加
iaa.imgcorruptlike.Saturate(severity=(1, 3)), # 色彩飽和度
]
)
],
# 隨機(jī)順序運(yùn)行augmentations
random_order=True
)
], random_order=True) # 隨機(jī)運(yùn)行augmenters數(shù)量
# 圖片文件相關(guān)路徑
path = './input/'
savedpath = './output/'
imglist = []
filelist = os.listdir(path)
# 遍歷要增強(qiáng)的文件夾,把所有的圖片保存在imglist中
for item in filelist:
img = cv2.imread(path + item)
# print('item is ',item)
# print('img is ',img)
# images = load_batch(batch_idx)
imglist.append(img)
# print('imglist is ' ,imglist)
print('all the picture have been appent to imglist')
for count in range(1):
images_aug = seq.augment_images(imglist)
for index in range(len(images_aug)):
# 保存圖片 文件名和源文件相同
filename = str(filelist[index])
cv2.imwrite(savedpath + filename, images_aug[index])
print('image of count%s index%s has been writen' % (count, index))else
對input里的原圖像重命名:00001.jpg或者1.jpg
重命名00001.jpg
Rename0001.py
# ###################文件重命名#################
import os
import re
import sys
path = r"./input"
filelist = os.listdir(path)
filetype = '.jpg'
for file in filelist:
print(file)
for file in filelist:
Olddir = os.path.join(path, file)
print(Olddir)
if os.path.isdir(Olddir):
continue
# os.path.splitext("path"):分離文件名與擴(kuò)展名
filename = os.path.splitext(file)[0]
filetype = os.path.splitext(file)[1]
# zfill() 方法返回指定長度的字符串,原字符串右對齊,前面填充0
Newdir = os.path.join(path, filename.zfill(5) + filetype) # 數(shù)字5是定義為5位數(shù),可隨意修改需要的
os.rename(Olddir, Newdir)重命名1.jpg
Rename1.py
# ###################文件重命名################
import os
class BatchRename():
def __init__(self):
self.path = './input/' # 圖片的路徑
def rename(self):
filelist = os.listdir(self.path)
filelist.sort()
total_num = len(filelist) # 獲取文件中有多少圖片
i = 0 # 文件命名從哪里開始(即命名從哪里開始)
for item in filelist:
if item.endswith('.png'):
src = os.path.join(self.path, item)
dst = os.path.join(os.path.abspath(self.path), str(i) + '.png')
try:
os.rename(src, dst)
print('converting %s to %s ...' % (src, dst))
i = i + 1
except Exception as e:
print(e)
print('rename dir fail\r\n')
print('total %d to rename & converted %d jpgs' % (total_num, i))
if __name__ == '__main__':
demo = BatchRename() # 創(chuàng)建對象
demo.rename() # 調(diào)用對象的方法效果圖
input示例 00001.jpg

output示例 00001.jpg

input示例 00005.jpg

output示例 00005.jpg

到此這篇關(guān)于Python imgaug庫 安裝與使用教程(圖片加模糊光雨雪霧等特效)的文章就介紹到這了,更多相關(guān)Python imgaug庫安裝使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解pandas中缺失數(shù)據(jù)處理的函數(shù)
這篇文章主要為大家詳細(xì)介紹一下pandas中處理缺失數(shù)據(jù)的一些函數(shù),文中具體講解了一下各個函數(shù)的使用,需要的可以參考一下2022-01-01
淺析Python 實現(xiàn)一個自動化翻譯和替換的工具
這篇文章主要介紹了Python 實現(xiàn)一個自動化翻譯和替換的工具,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04
基于python2.7實現(xiàn)圖形密碼生成器的實例代碼
本文通過實例代碼給大家介紹了python2.7實現(xiàn)圖形密碼生成器,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2019-11-11

