python的N個小功能(圖片預處理:打開圖片,濾波器,增強,灰度圖轉換,去噪,二值化,切割,保存)


#############################################################################################

############################圖片預處理以及圖片裁剪###########################################

#############################################################################################

######圖片切割##########

import os

import os.path

from PIL import Image

from PIL import ImageFilter

from PIL import ImageEnhance

import time

#########################切割函數#########################################

#################我的是根據目標圖片,80*20以及實驗得出結論################

##########################################################################

def segment(im):

         s=6   #首次第一個點的橫坐標

         w=16  #寬度

         h=20  #第二個點的縱坐標

         t=0   #第一個點的縱坐標

         im_new=[]#在一張圖片裁剪四個區域

         #for i in range(4):

         #       im1=im.crop((s+w*i,t,s+w*(i+1),h))  #crop函數得到局部區域

         #       im_new.append(im1)

         im1=im.crop((6,0,6+17,20))

         im_new.append(im1)

         im1=im.crop((23,0,23+16,20))

         im_new.append(im1)

         im1=im.crop((39,0,39+16,20))

         im_new.append(im1)

         im1=im.crop((55,0,55+18,20))

         im_new.append(im1)

         return im_new

 

#################圖片增強######################################

#################圖片二值化函數:符合閾值之上,設為1;否則設為0###

###############################################################

def binarizing(im,threshold):

         pixdata=im.load()

         w,h=im.size

         for j in range(h):

                   for i in range(w):

                            if pixdata[i,j]<threshold:

                                     pixdata[i,j]=0

                            else:

                                     pixdata[i,j]=255

         return im

 

################################圖片去噪############################

##########對於像素值>245的鄰域像素,判別為屬於背景色################

##########,如果一個像素上下左右4各像素值有超過2個##################

##########像素屬於背景色,那么該像素就是目標點,否則就是噪聲##########

####################################################################

def denoising(im):

         pixdata=im.load()

         w,h=im.size

         for j in range(1,h-1):

                   for i in range(1,w-1):

                            count=0

                            if pixdata[i,j-1]>245:

                                     count=count+1

                            if pixdata[i,j+1]>245:

                                     count=count+1

                            if pixdata[i+1,j]>245:

                                     count=count+1

                            if pixdata[i-1,j]>245:

                                     count=count+1

                            if count>2:

                                     pixdata[i,j]=255

         return im

 

###############################################################################

##############圖片轉換:打開圖片,濾波器,增強,灰度圖轉換,去噪,二值化############

###############################################################################

def imgTransfer(f_name):

         im=Image.open(f_name)  #打開圖片

         im=im.filter(ImageFilter.MedianFilter(1))  #對於輸入圖像的每個像素點,該濾波器從(size,size)的區域中拷貝中值對應的像素值存儲到輸出圖像中

         #enhancer=ImageEnhance.Contrast(im)

         #im=enhancer.enhance(1)

         im=ImageEnhance.Contrast(im).enhance(1.5)#enhance()的參數factor決定着圖像的對比度情況。從0.1到0.5,再到0.8,2.0,圖像的對比度依次增大.0.0為純灰色圖像;1.0為保持原始

         im=im.convert('L')   #灰度圖轉換

         im=denoising(im)     #圖片去噪

         im=binarizing(im,200)  #圖片二值化

         #im=nse.removeNoisy(im)

         #im.save('/User/iswin/Downloads/vim/test.clear.jpg','jpeg')

         #im.show()

         return im

 

#####批量裁剪圖片,並保存######################################

def cutPictures(img):

         im=imgTransfer(img)#####圖片預處理,二值化,圖片增強

         pics=segment(im) #######用crop函數裁剪

         for pic in pics:

                   pic.save('G:\Test\%s.jpg'%(int(time.time()*1000000)),'jpeg')

 

rootdir=u'G:\Test'

 

for parent,dirnames,filenames in os.walk(rootdir):

 

         for dirname in dirnames:

                   print "dirname is:"+dirname

                   print "parent is:"+parent

 

         for filename in filenames:

                   print "filename is:"+filename

                   print "parent is:"+parent

                   print "the full name is:"+os.path.join(parent,filename)

                   cutPictures(os.path.join(parent,filename))

 

########實驗效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM