深度學(xué)習(xí)中對(duì)圖片預(yù)處理的幾個(gè)方法

最近在做 object_detection 時(shí)需要用到一些對(duì)圖片的預(yù)處理腳本。
比如要批量剪切圖片侨核、圖片灰度颂跨、二值化、縮放荧飞、豐富數(shù)據(jù)等操作凡人,寫了如下幾個(gè)功能的腳本

images 文件加內(nèi)為圖片處理

  • 將某目錄內(nèi)圖片全部轉(zhuǎn)化成 500*500
python resize.py ./test/ 500
  • 將某目錄內(nèi)圖片隨機(jī)切成 300*300
python randomCrop.py ./test/ 300
  • 將某目錄內(nèi)圖片類型轉(zhuǎn)為RGB
python convertToRGB.py ./test/
  • 將某目錄內(nèi)圖片轉(zhuǎn)為灰度圖
python convertToL.py ./test/
  • 將某目錄內(nèi)圖片做二值化處理,其中閾值為 120叹阔。二值化圖像每個(gè)像素用 8 個(gè)bit表示挠轴,0 表示黑,255 表示白耳幢。閾值的作用就是大于閾值為白岸晦,小于閾值為黑
    在圖像檢測中較常用,可以去掉過多的干擾和噪點(diǎn)
python convertTo1.py ./test/ 120
  • 將某張圖片按照閾值 0~255 生成 256 張圖片睛藻,用于選擇合理的閾值
python getAllBinarizationImg.py test/github.JPG
  • 將某目錄內(nèi)圖片翻轉(zhuǎn) 45 度启上,共翻轉(zhuǎn) 7 次,每翻轉(zhuǎn)一次生成一張圖店印。適合增加樣本數(shù)量冈在。還在在翻轉(zhuǎn)中隨機(jī)增加剪裁、灰度等豐富樣本數(shù)據(jù)
python rotate.py test 45 7

可以參考 github

核心代碼如下

import os
import sys
import math
import random
import functools
import numpy as np
from PIL import Image, ImageEnhance

def rotate(img_path, degree, num):
    img = Image.open(img_path)
    
    save_path = './rotate/'
    mkdir(save_path)

    i = 1
    while i <= num:
        img = img.rotate(degree)
        img_arr = os.path.basename(img_path).split('.')
        img_name = save_path + img_arr[0] + '_' + bytes(degree * i) + '.' + img_arr[1]
        img.save(img_name, quality=95)
        i += 1
        print 'save to ' + img_name



def randomCrop(img_path, size, scale=[0.08, 1.0], ratio=[3. / 4., 4. / 3.]):
    img = Image.open(img_path)
    aspect_ratio = math.sqrt(np.random.uniform(*ratio))
    w = 1. * aspect_ratio
    h = 1. / aspect_ratio

    bound = min((float(img.size[0]) / img.size[1]) / (w**2),
                (float(img.size[1]) / img.size[0]) / (h**2))
    scale_max = min(scale[1], bound)
    scale_min = min(scale[0], bound)

    target_area = img.size[0] * img.size[1] * np.random.uniform(scale_min,
                                                             scale_max)
    target_size = math.sqrt(target_area)
    w = int(target_size * w)
    h = int(target_size * h)

    i = np.random.randint(0, img.size[0] - w + 1)
    j = np.random.randint(0, img.size[1] - h + 1)

    img = img.crop((i, j, i + w, j + h))
    img = img.resize((size, size), Image.LANCZOS)

    if img.mode != 'RGB':
        img = img.convert('RGB')

    save_path = './random_crop/'
    mkdir(save_path)
    img_name = save_path + os.path.basename(img_path)
    img.save(img_name, quality=95)
    print 'save to ' + img_name
    return img

def resize(img_path, size):
    img = Image.open(img_path)

    img = img.resize((size, size), Image.ANTIALIAS)

    if img.mode != 'RGB':
        img = img.convert('RGB')

    save_path = './resize_' + bytes(size) + '/'
    mkdir(save_path)
    img_name = save_path + os.path.basename(img_path)
    img.save(img_name, quality=95)
    print 'save to ' + img_name
    return img

def convertToRGB(img_path):
    img = Image.open(img_path)

    if img.mode != 'RGB':
        img = img.convert('RGB')

    save_path = './convert/'
    mkdir(save_path)
    img_name = save_path + os.path.basename(img_path)
    img.save(img_name, quality=95)
    print 'save to ' + img_name
    return img

def convertToL(img_path):
    #a = np.array(Image.open(img_path).convert('L')).astype('float')
    # 
    #depth = 10.
    #grad = np.gradient(a)
    #grad_x, grad_y = grad
    # 
    #grad_x = grad_x*depth/100.
    #grad_y = grad_y*depth/100.
    #A = np.sqrt(grad_y**2+grad_y**2+1)
    #uni_x = grad_x/A
    #uni_y = grad_y/A
    #uni_z = 1./A
    # 
    #vec_el = np.pi/2.2
    #vec_az = np.pi/4
    #dx = np.cos(vec_el)*np.cos(vec_az)
    #dy = np.cos(vec_el)*np.sin(vec_az)
    #dz = np.sin(vec_el)
    # 
    #b = 255*(dx*uni_x+dy*uni_y+dz*uni_z)
    #b = b.clip(0, 225)
    # 
    #im = Image.fromarray(b.astype('uint8'))
    # 

    im = Image.open(img_path)
    im = im.convert('L')
    save_path = './toL/'
    mkdir(save_path)
    img_name = save_path + os.path.basename(img_path)
    print('success save to ' + img_name)
    im.save(img_name, quality=95)

def convertTo1(img_path, threshold):
    im = Image.open(img_path)
    Lim = im.convert('L' )

    table = []
    for i in range(256):
        if i < threshold:
            table.append(0)
        else:
            table.append(1)
    
    bim = Lim.point(table, '1' )

    save_path = './to_binarization/'
    mkdir(save_path)
    img_arr = os.path.basename(img_path).split('.')
    img_name = save_path + img_arr[0] + '_' + bytes(threshold) + '.' + img_arr[1]

    print('success save to ' + img_name)

    bim.save(img_name, quality=95)

def imgList(dir, suffix = '.JPG'):
    
    assert os.path.isdir(dir)

    list = []
    for file in os.listdir(dir):
        img_path = os.path.join(dir, file)
        if os.path.splitext(img_path)[1] == ".JPG":
            list.append(img_path)
    return list

def mkdir(dir):
    if not os.path.isdir(dir):
        os.makedirs(dir)

if __name__ == '__main__':
    print 'test'
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末按摘,一起剝皮案震驚了整個(gè)濱河市包券,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炫贤,老刑警劉巖溅固,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兰珍,居然都是意外死亡侍郭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門掠河,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亮元,“玉大人,你說我怎么就攤上這事唠摹”蹋” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵跃闹,是天一觀的道長嵌削。 經(jīng)常有香客問我,道長望艺,這世上最難降的妖魔是什么苛秕? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮找默,結(jié)果婚禮上艇劫,老公的妹妹穿的比我還像新娘。我一直安慰自己惩激,他們只是感情好店煞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布蟹演。 她就那樣靜靜地躺著,像睡著了一般顷蟀。 火紅的嫁衣襯著肌膚如雪酒请。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天鸣个,我揣著相機(jī)與錄音羞反,去河邊找鬼。 笑死囤萤,一個(gè)胖子當(dāng)著我的面吹牛昼窗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涛舍,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼澄惊,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了富雅?” 一聲冷哼從身側(cè)響起掸驱,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吹榴,沒想到半個(gè)月后亭敢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滚婉,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡图筹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了让腹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片远剩。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骇窍,靈堂內(nèi)的尸體忽然破棺而出瓜晤,到底是詐尸還是另有隱情,我是刑警寧澤腹纳,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布痢掠,位于F島的核電站,受9級(jí)特大地震影響嘲恍,放射性物質(zhì)發(fā)生泄漏足画。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一佃牛、第九天 我趴在偏房一處隱蔽的房頂上張望淹辞。 院中可真熱鬧,春花似錦俘侠、人聲如沸象缀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽央星。三九已至霞怀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莉给,已是汗流浹背里烦。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留禁谦,地道東北人胁黑。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像州泊,于是被迫代替她去往敵國和親丧蘸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容