iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

python-資料分析與機器學習系列 第 27

DAY27-Haar特徵分類器(Ⅰ)

  • 分享至 

  • xImage
  •  

Haar是一種在視覺和圖像處理中常用的特徵檢測技術,可以在圖片中偵測特定物件是否存在,這個特定物件可以是人、貓、狗、交通號誌以及車輛等等。

要做偵測物件的圖片時,我們需要先蒐集正樣本圖片以及負樣本圖片,正樣本圖片就是包含要偵測物件的圖片,負樣本圖片就是不包含要偵測物件的圖片。
由於要做的範例是從手機拍攝下來的,解析度非常大,因此需要轉成較小的圖片才能進行訓練。

正樣本處理:

(1)轉換圖片尺寸

清空指定資料夾的內容

def emptydir(dirname):  #清空資料夾
    if os.path.isdir(dirname):  #資料夾存在就刪除
        shutil.rmtree(dirname) #徹底清空資料夾
        sleep(2)  
    os.mkdir(dirname)  #建立資料夾

將指定資料夾中所有JPG圖片調整尺寸後保存到另一個資料夾

def dirResize(src, dst):
    myfiles = glob.glob(src + '/*.JPG')  #讀取資料夾全部jpg檔案
    emptydir(dst)
    print(src + ' 資料夾:')
    print('開始轉換圖形尺寸!')
    for i, f in enumerate(myfiles):
        img = Image.open(f)
        img_new = img.resize((300, 225), PIL.Image.ANTIALIAS)  
        outname = str("resizejpg") + str('{:0>3d}').format(i+1) + '.jpg'
        img_new.save(dst + '/' + outname) #生成新的檔案名稱
    print('轉換圖形尺寸完成!\n')

對這兩個不同的資料夾執行相同的圖片調整尺寸

import PIL
from PIL import Image
import glob
import shutil, os
from time import sleep

dirResize('carPlate_sr', 'carPlate')
dirResize('realPlate_sr', 'realPlate')

(2)轉為bmp格式
建立Haar模型時正樣本圖形需要用bmp格式。

from PIL import Image
import glob
import os

myfiles = glob.glob("carPlate/*.JPG")
print('開始轉換圖形格式!')
for f in myfiles:
    namespilt = f.split("\\")
    img = Image.open(f)
    outname = namespilt[1].replace('resizejpg', 'bmpraw')  #置換檔名
    outname = outname.replace('.jpg', '.bmp')  #置換附加檔名
    img.save('carPlate/'+ outname, 'bmp')  #以bmp格式存檔
    os.remove(f)
print('轉換圖形格式結束!')

處理負樣本圖片

清空指定資料夾的內容

def emptydir(dirname):
    if os.path.isdir(dirname):
        shutil.rmtree(dirname)
        sleep(2)  
    os.mkdir(dirname)

調整尺寸並轉換為灰階

import PIL
from PIL import Image
import glob
import shutil, os
from time import sleep

myfiles = glob.glob("carNegative_sr/*.JPG")
emptydir('carNegative')
print('開始轉換尺寸及灰階!')
for i, f in enumerate(myfiles):
    img = Image.open(f)
    img_new = img.resize((500, 375), PIL.Image.ANTIALIAS)#使用ANTIALIAS方法來平滑調整
    img_new = img_new.convert('L')  #轉換為灰階
    outname = str("negGray") + str('{:0>3d}').format(i+1) + '.jpg'
    img_new.save('carNegative/'+ outname)
    i = i + 1
print('完成轉換尺寸及灰階!')

還沒結束喔,明天繼續加油!

---20231012---


上一篇
DAY26-臉部辨識
下一篇
DAY28-Haar特徵分類器(Ⅱ)
系列文
python-資料分析與機器學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言