版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
ProgrammingComputerVisionwithPython
安裝
。1需要準備的安裝包
。2安裝Pvthon(xy)
03安裝PCV庫
0.4VLfeat
為順利幫助讀者完成本書中實例的學習,譯者已對代碼做了相應整理,下面給出在對本書實例學習前,你需要做的前期安裝
工作。注意,下面譯者給出的安裝過程是針對Windows下的,其他平臺如Linux、Mac請查閱中譯本附錄。
0.1需要準備的安裝包
要完整復現(xiàn)書中的實例,你需要的主要四個文件包括Python(x,y)2.7.x安裝包、PCV庫、VLfeat
(/download.html評口本書用到的數據庫。Pvthon(x.v)可以在GoogleCode
((https://code.aooqle.eom/p/pvthonxv/)),PCV庫、本書整理出來的實例代碼以及本書用到的所有圖像數據可以從苴頁
(http:〃/pcvwithpvthon/)給出的鏈接下載。
0.2安裝Python(x,y)
在Windows下,譯者推薦你安裝Python(x,y)2.7.x。Python(x,y)2.7.x是一個庫安裝包,除了包含Python自身外,還包含了很
多第三方庫,下面是安裝Python(x,y)時的界面:
#Python(x,y)Setup區(qū)
ChooseComponents
ChoosewhichfeaturesofPython(xry)youwantto
install.
Checkthecomponentsyouwanttoinstallanduncheckthecomponentsyoudon'twantto
install.ClickNexttocontinue.
Selectthetypeofinstall:Full
Or,selecttheoptional二□Directories
componentsyouwishtoL-0Default
install:
???l~~lCustom
Python2.7.6
00Python
0BaseLibraries1.5.0-10
ItIC.CfC.
Description
Spacerequired:794.3MBPositjonyourmouseoveracomponenttoseeits
description.
Python(x4y),thePythonDistributionmadebyScientistsforScientists
<BackNext>Cancel
0R]PythonYE
IPytnon1.2.0-4vitables0py2exe0.6.9
BaseUbranes1.5.0*10叵B
0OpenCV2.4.8-5
BasePython1.9.2-24Eguidatd1.6.1-3EParallelPython1.6.4-3
0pyparsing2.0.1-2
setuptools3.0-12Eguiqwt2.3.1-4EPywm32218.4-2
Matptotiib1.3.1-4SendKeysO.30Veusz1.20.1-9
requests2.2.1-1叵E
netcdf41.0.8-S0pandas0.13.1-8
htmlSb0.999-2Bnose1.3.0*2E
Hopenpyxi1.8.3-6
Pip1.5.2-7fbrmlavout1.0.15*3Epywinauto0.4.2-1
PyCrypto2.6-1Cython0.21.1*100pyvisa1.4(Spsuti1.2.1-7
3PyQt4.9.6-4docutis0.11-2EPySenal2.7-10statsmodds0.5.0-1
WJxydocjn)a22.7.2-3EPyParaBd0SQLAkhemy0.8.4-10
3xy132Tpygments1.6-1EpyhdfO.8.3-20virtuatenv1.11,2*6
自QtHdp4.8.5?3Sphinx1.2.1-4ExW0.9.2-3回uncertaribes2.4.4-10
ReportLab2.7-1xlwtO.7.5-1
Spyder2.2.5-10E0freemage3.6.0-5
smplejson3.3.2-7pyint1.1.0-90Pyicui.s-i
PyQwt5.2.1-5E
r$t2pdf0.93-3wxPython-1
NumPy1.8.0-5E0lxmi3.3.1-11
PyOpenGL3.0.2-3,Ainpdb
SoPy0.13.3-6E回gevent1.0.0-4
VPython5.74-2VIK5.10.1-3
numexpr2.3-5E回paramrfco1.12.2-7
SymPy-4ITK4.5.0-40Bottleneck0.8.O,3
h5py2.2.1-5E
PMwZ3.0-6cvxopt1.1.6-1EP?y3.40mahotas1.1.0-^
Pyreadme2.0-1PyV/avelets0.2.2EETS4.4.1-60PycURL-6
scfats-tearn0.14.1-4
pyeparser2.10-2Emx3.2.7-30Babel1.3-3
cffiO.8.1-5scfcts.mdgeO.9.3-SEgnuplot0pyodbc3.0.7-1
pyzmq14.0.1-6MDPEGOAL1.10.1-3(3pyganie1.9.2-2
Torando3.2-5NebvorkX1.8.1-1Epydictxn0.9.8-20BeaubfUSoup44.322
patsy0.2.1-1PYTabte53.1.0-4Eoc_Freeze4.3.2-20pygraphviz1.3-3
pyyaml3.10-1btosc-python1.2.blESdTE3.3.2-3
fabric1.8.2-3pyOpenSSL0.13.1-1EConsole2.0.148-8
astropy0.3.0-3?EV/rMefge
pytest2.5.2-6EM<1GW
enam!0.9.0-3ESWIG2.0.11-3
gettext
從上面第二幅圖可以看出,pythonxy不僅包含了SciPy、NumPy、PyLab、OpenCV、MatplotLib,還包含了機器學習庫
scikits-learno為避免出現(xiàn)運行實例時出現(xiàn)的依賴問題,譯者建議將上面的庫全部選上,也就是選擇“full”(譯者也是用的全部
安裝的方式進行后面的實驗的)。安裝完成后,為驗證安裝是否正確,可以在Pythonshell里確認一下OpenCV是否已安裝來
進行驗證,在PythonShell里輸入下面命令:
fromcv2import_version_
_version_
輸入上面命令,如果可以看到OpenCV的版本信息,則說明python(x,y)已安裝正確。
另外,需要提醒讀者的是,Python是沒有平臺區(qū)分的,這里指的平臺不是指Linux和Mac這樣的平臺概念,而是在Windows
上沒有位數的區(qū)分。舉個簡單的例子,比如你是64位的Windows系統(tǒng),你可以安裝32位的Python。對于這一部分的詳細說
明,可以參閱譯者的一篇博文Diango配置MySQL(httpj//blog/config-mysal-for-diango.html)最后一段的說
明。好了,關于Python(x,y)的安裝說明就說到這里。
0.3安裝PCV庫
PCV庫是原書作者寫的一個第三方庫,書中幾乎所有的實例到要用到改庫。假設你已從下載本書由譯者整理的中譯版源碼,
從Windowsemd終端進入PCV所在目錄:
cdPCV
pythonsetup.pyinstall
運行上面命令,即可完成PCV庫的安裝。為了驗證PCV庫是否安裝成功,在運行上面命令后,可以打開Python自帶的
Shell,在Shell輸入:
importPCV
如果未報錯,則表明你已成功安裝了該PCV庫。
0.4VLfeat
VLFeat是一個跨平臺的開源機器視覺庫,它囊括了當前流行的機器視覺算法,如SIFT,MSER,HOG,同時還包含了諸如K-
MEANS,HierarchicalK-means的聚類算法。本書中主要在提取sift特征時用到了VLfeat。
VLF
HomeDownloadTutorialsApplicationsDocumentation
Home
TheVLFeatopensourcelibraryimplementspopularcomputervisionaigonthmsincludingHOGSIFTMSERK-meansACMOpenSource
merarcfiicaik-meanssgg!omeratr/e/nformattonbottfenecK.SUCsuperp<xe:s,andQUICKshiftItiswritteninCforAward2010
efficiencyandcompatibilitywithinterfacesinMATLABforeaseofuseanddetaileddocumentationthroughoutIt
supportsWindows.MacOSX.andLinuxThelatestversionofVLFeatis
DownloadDocumentation
?VLFT(WindowsklacLinux)[間3匕】nds
?CAPIwithalgorithmdescnptions
?Commandline〔oois
如上圖所示,從紅色框標的地方下載VLFeat,解壓:
?Works(D:)?/盤H?Sci_codes?vlfeat-0.9.17-bin?vlfeat-0.9.17?bin?
/)I*(T)幫助(H)
共享▼新建文件夾
ll
glnx86glnxa64macimaci64Win32win64
你需要的僅是對應平臺的可執(zhí)行文件,譯者系統(tǒng)是32位的,所以選用的是Win32。注意目前VLFeat最新發(fā)布版已到0.9.18
了。對于0.9.18,目錄結構和0.9.17的一樣,所以你也僅需bin下對應的文件夾下的可執(zhí)行文件。將該Win32拷貝到你想放置
的某個目錄,譯者將其放置在計算機的如下目錄:
?Works(D:)?mltools?
V)I*(T)幫助(H)
共享▼新建文件夾
PCVpython-grwin32vlfea
aph-core-
1.8.2
需要注意的是,譯者將原來的“bin”文件名重新"winSZvIfeat"。完成該步驟后,進入PCV所在目錄:
>Works(D:)?mltools>PCV>PCV?localdescriptors
V)I*C0幫助(H)
,共享▼新建文件夾
購購?g
_init_.pydsift.pyharris.pysift.py
打開sift.py,找到下面代碼:
defprocess__image(imagename,resultname,params="--edge-thresh10--peak-thresh5"):
"""processanimageandsavetheresuLtsinafiLe"""
ifimagename[-3:]!='pgm':
^createapgmfiLe
im=Image.open(imagename).convert('L')
im.save('tmp.pgm')
imagename='tmp.pgm'
cmmd=str("D:\mltools\win32vlfeat\sift.exe"+imagename+"--output="+resultname+
""+params)
os.system(cmmd)
print'processed',imagename,'to',resultname
將cmmd中的目錄修改為你自己放置的Vlfeatbin所在目錄。這里稍微解釋一下os.system(cmmd)這句話的意思,這里Python
通過os.system()調用外部可執(zhí)行文件,也就是Vlfeatbin目錄下的sift.exe。
好了,安裝完后,你便可以運行書中的大部分實例代碼了。這里之所以是“大部分”是因為書中的某些實例,還要用到別的
庫。
?作者譯者(author.html)第一章圖像處理基礎》(chaoterl.html)
。。
?2014YonaYuan(http:〃vuanvonci.orQ)保留部分權力。在線閱讀版本基于“CC3.0BY-SA協(xié)議"(http:〃creativecommons.ora/licenses/bv-sa/3.0/)發(fā)
布
ProgrammingComputerVisionwithPython
第一章圖像處理基礎
1.1PIL-Pvthon圖像庫
1.1.1對圖片進行格式轉換
1.1.2創(chuàng)建縮略圖
1.1.3拷貝并粘貼區(qū)域
1.1.4調整尺寸及旋轉
1.2MatDlotlib庫
1.2.1畫圖、描點和線
1.2.2圖像輪廓和直方圖
1.2.4交互注釋
1.3NumPy庫
1.3.1圖像數組表示
1.3.2灰度變換
1.3-3調整圖像尺寸
133直方圖均衡化
1.3.4圖像平均
1.3.5對圖像進行主成分分析
1.3.6Pickle模塊
1.4SciPv模塊
1.4.1圖像模糊
1.4.2圖像差分
1.4.3形態(tài)學-物體計數
1.4.4有用的SciPv模塊
1.5更高級的例子:圖像降噪
1.1PIL-Python圖像庫
PIL(PythonImagingLibrary)圖像庫提供了很多常用的圖像處理及很多有用的圖像基本操作。PIL庫下載地
址[/products/pil/](http:〃www.D/Droducts/Dil/)c下面演示原書P001-Figi-1讀入一幅
圖片的例子:
#-*-coding:utf-8
fromPILimportImage
frompylabimport*
#添加中文字體支持
frommatplotlib.font_managerimportFontProperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)
figure()
pil_im=Image.open('../data/empire.jpg')
gray。
subplot(121)
title(u'原圖',,fontproperties=font)
axis('off')
imshow(pil_im)
pil_im=Image.open('../data/empire.jpg').convert(1L1)
subplot(122)
title(u'灰度圖,,fontproperties=font)
axis('off')
imshow(pil__im)
show()
運行上面的代碼,可以得出原書P002-Fig1-1中的前兩幅圖片,如下:
更多關于PIL的實例,可以參閱PIL在線文檔fwww./librarv/pil/handbook/index.htm./l
(http:〃/library/pil/handbook/index.htm)。
1.1.1對圖片進行格式轉換
利用save()方法,PIL可以將圖片保存問很多不同的圖像格式。下面演示原書P002中對圖片進行轉換的例子。
#-*-coding:utf-8
fromPCV.tools.imtoolsimportget_imlist#導入原書的PCV模塊
fromPILimportImage
importos
importpickle
filelist=get_imlist('../data/convert_images_format_test/')#獲取convert_images_format_test文件夾
下的圖片文件名(包括后綴名)
imlist=file('../data/convert_images_format_test/imlist.txt'/w')#將獲取的圖片文件列表保存到
imList.txt中
pickle,dump(filelist,imlist)#序列化
imlist.close()
forinfileinfilelist:
outfile=os.path.splitext(infile)[0]+".png"#分離文件名與擴展名
ifinfile!=outfile:
try:
Image.open(infile).save(outfile)
exceptlOError:
print"cannotconvert",infile
上面3^0代而2965b舊211651文件夾是譯者放的測試圖片,共24幅圖像,如下圖示,測試圖片全部為.jpg格式的。譯者在
源代碼中添加了部分代碼以便將獲取的圖像文件名列表保存下來,同時將原來的所有圖像轉化為.png格式的圖像。注意,
在載入模塊時,載入了原書的PCV模塊,關于PCV模塊的安裝,詳見[PCV模塊的安裝1。運行上面代碼,可以得到轉化格式后
的圖像,運行結果為:
?JP£G09?(24)ukbenchJPG格式圖像
隨I
ulcbenchOukbefxhOvkb?xhOukb?<tchOuktMAchOukberxM)ukb?KhOukbeochOukbeixhOukbrxHOukbefKhO9kbechO
0000加OOOHP90002jpgOOOJjpgOOWMOOOSjpg0006jpg0007而g0008^90009MOOlOjpg0011jP9
M
ukbenchOukbeixhOukbenchOukkxochOukbenchOukbenchOulcbenchOulcb^chOukbenchOukbenchOukbechOukbc?KhO
0012^0013*9OOMjpgOOlSipgOOl6jpg0017jpg00叫pg0019加9820jpgOWljpg0022;pg823通
?PNG圖6(24)ukbenchJPG格式轉化為PNG格式后的圖像
童
ukbeftchOukbenchOukbenchOukbmchOukb?fxhOukbetxhOukb?<KhOukbeochOukbenchOukbenchOukb?nchOukbeocH)
0000.pr>9OOOl.pngOOO2.pn90001吟0004.pr^0005,po9OOO&pn90007.pr?9OOOa-png0009.pn9OOIO.P09OOltpng
時跟睡ja
uicbt^liOukb??xH>ukbenchOukbeochOukb?r<>?0ukbenchOwkbe<KhOukbenchOukben<2ukbeechOukbenchO
0012^rtgOOllpng814呻001$^r?981&p^9OO17.png001&.|X>9819fOO2O.pftg82l.p?90022.pc90023^9
?文本文檔⑴
ukbenchJPG格式圖像文件名列表
■mKttM
1.1.2創(chuàng)建縮略圖
利用PIL可以很容易的創(chuàng)建縮略圖,設置縮略圖的大小,并用元組保存起來,調用thumnail。方法即可生成縮略圖。創(chuàng)建縮略
圖的代碼見下面。
1.1.3拷貝并粘貼區(qū)域
調用crop。方法即可從一幅圖像中進行區(qū)域拷貝,拷貝出區(qū)域后,可以對區(qū)域進行旋轉等變換。關于拷貝、旋轉粘貼的代碼
見下面。
1.1.4調整尺寸及旋轉
要對一幅圖像的尺寸進行調整,可以調用resize。方法,元組中放置的便是你要調整尺寸的大小。如果要對圖像進行旋轉變換
的話,可以調用rotate。方法。
下面代碼顯示上面提到的所有的圖像處理操作,即原圖顯示、RGB圖像轉為灰度圖像、拷貝粘貼區(qū)域、生成縮略圖、調整圖
像尺寸、圖像旋轉變換的實例代碼:
#-*-coding:utf-8
fromPILimportImage
frompylabimport*
#添加中文字體支持
frommatplotlib.font_managerimportFontProperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)
figure()
#顯示原圖
pil_im=Image.open('../data/empire.jpg*)
printpil_im,mode,pil_im.size^pil_im.format
subplot(231)
title(u'原圖‘,fontproperties=font)
axis('off')
imshow(pil_im)
#顯示灰度圖
pil_im=Image.open('../data/empire.jpg1).convert('L')
gray()
subplot(232)
title(u'灰度圖',fontproperties二font)
axis('off')
imshow(pil_im)
#拷貝粘貼區(qū)域
pil_im=Image.open('../data/empire.jpg')
box=(100,100,400,400)
region=pil_im.crop(box)
region=region.transpose(Image.ROTATE_180)
pil_im.paste(region,box)
subplot(233)
title(u'拷貝粘貼區(qū)域',fontproperties=font)
axis('off')
imshow(pil_im)
#縮略圖
pil_im=Image.open('../data/empire.jpg')
size=128,128
pil_im.thumbnail(size)
printpil_im.size
subplot(234)
title(u'縮略圖',fontproperties=font)
axis('off')
imshow(pil_im)
pil_im.save('../images/ch01/thumbnail.jpg')#保存縮略圖
#調整圖像尺寸
pil_im=Image.open('../data/empire.jpg')
pil_im=pil_im.resize(size)
printpil__im.size
subplot(235)
title(u'調整尺寸后的圖像’,fontproperties=font)
axis('off')
imshow(pil_im)
#旋轉圖^^45。
pil_im=Image.open('../data/empire.jpg')
pil_im=pil_im.rotate(45)
subplot(236)
旋轉45。后的圖像',fontproperties=font)
axis('off')
imshow(pil_im)
show()
運行上面代碼,可得P002Figure中出現(xiàn)的所有實例圖,結果如下:
原圖灰度圖拷貝粘貼區(qū)域
縮略圖旋轉45°后的圖像
調整尺寸后的圖像
1.2Matplotlib庫
當在處理數學及繪圖或在圖像上描點、畫直線、曲線時,Matplotlib是一個很好的繪圖庫,它比PIL庫提供了更有力的特性。
Matplotlib是開源的,可以在[matD](http:〃/)上下載.并且它還提供了詳細
的文檔及教程。這里,會展示一些我們在本書后面會用到的函數的一些實例。
1.2.1畫圖、描點和線
雖然Matplotlib可以創(chuàng)建漂亮的條狀圖、餅圖、散點圖等,但是在很多計算機視覺應用場合,其實只用到了一些常用的命
令。下面展示在一幅圖像上描一些點和畫一條直線的例子。
#-*-coding:utf-8-*-
fromPILimportImage
frompylabimport*
#添加中文字體支持
frommatplotlib.font_managerimportFontproperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)
im=array(Image.open('../data/empire.jpg'))
figure()
#畫有坐標軸的
subplot(121)
imshow(im)
x=[100,100,400,400]
y=[200,500,200,500]
plot(x,y,'r*')
plot(x[:2],y[:2])
title(u'繪圖:"empire.jpg",,fontproperties=font)
#不顯示坐標軸
subplot(122)
imshow(im)
X=[100,100,400,400]
y=[200,500,200,500]
plot(x,y,'r*')
plot(x[:2],y[:2])
axis('off')#顯示坐標軸
title(u'繪圖:"empire.jpg",,fontproperties=font)
show()
運行上面代碼,即可得原書P005中Figure1-2中左邊的結果。去掉上面代碼中坐標軸的注釋,即可得Figure1-2中右邊的結
果。運行結果如下:
繪圖:"empire.jpg”
-100
0
100
200
300
400
500
600
700
8嗚000100200300400500600
1.2.2圖像輪廓和直方圖
下面我們看兩個特別的例子:圖像輪廓線和圖線等高線。在畫圖像輪廓前需要轉換為灰度圖像,因為輪廓需要獲取每個坐標
[x,y]位置的像素值。下面是畫圖像輪廓和直方圖的代碼:
#?*-coding:utf-8
fromPILimportImage
frompylabimport*
#添加中文字體支持
frommatplotlib.font_managerimportFontProperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc"?size=14)
im=array(Image.open('../data/empire.jpg').convert('L'))#打開圖像,并轉成灰度圖像
figure()
subplot(121)
gray()
contour(im,origin='image')
axis('equal')
axis('off')
title(u'圖像輪廓,,fontproperties=font)
subplot(122)
hist(im.flatten()>128)
title(u'圖像直方圖',fontproperties二font)
pit.xlim([0,260])
pit.ylim([0,11000])
show()
運行上面代碼,可以得到書中的圖1-3所示的結果:
困像輪廓圖像直方圖
10000
1.2.4交互注釋
有時,用戶需要和應用進行交互,比如在圖像中用點做標識,或者在一些訓練數據中進行注釋。PyLab提供了一個很簡潔好
用的函數ginput。,它可以完成該任務,下面是一個演示交互注釋的簡短示例:
fromPILimportImage
frompylabimport*
im=array(Image.open('../data/empire.jpg'))
imshow(im)
print'Pleaseclick3points'
imshow(im)
x=ginput(3)
print'Youclicked:',x
show()
上面代碼先讀取empire.jpg圖像,顯示讀取的圖像,然后用ginput。交互注釋,這里設置的交互注釋數據點設置為3個,用戶
在注釋后,會將注釋點的坐標打印出來。
1.3NumPy庫
NumPy(httD:〃www.sciQy.or?g/NumPy/)是Pvthon一個流行的用于科學計算包。它包含了很多諸如矢量、矩陣、圖像等其他
非常有用的對象和線性代數函數。在本書中幾乎所有的例子都用到了NumPy數組對象。NumPv可以在sciD/Download]
(http:〃/Download)下載,在線文檔(http:〃docs.sciDy.orq/doc/numDy/)包含了很多常見問題的答案。
1.3.1圖像數組表示
在前面載入圖像的示例中,我們將圖像用array。函數轉為NumPy數組對象,但是并沒有提到它表示的含義。數組就像列表一
樣,只不過它規(guī)定了數組中的所有元素必須是相同的類型。下面的例子用于說明圖像數組表示:
#coding:utf-8
fromPILimportImage
frompylabimport*
im=array(Image.open('../data/empire.jpg'))
printim.shape,im.dtype
im=array(Image.open('../data/empire.jpg').convert('L'),'f')
printim.shape.,im.dtype
運行上面代碼,會給出下面結果:
(800,569,3)uint8
(800,569)float32
數組可以通過索引訪問和操作其中的元素。比如:value=im[i,j,k]。i,j是坐標,k是顏色通道。對于多個元素,可以用切片操
作,如:
im[ij:]=im[j:]#setthevaluesofrowiwithvaluesfromrowj
im[:,i]=100#setallvaluesincolumnito100
im[:100,:50].sum()#thesumofthevaluesofthefirst100rowsand50columns
50:100]#rows50-100,columns50-100(100thnotincluded)
im[i].mean()#averageofrowi
im[:,-1]#lastcolumn
:](orim[-2])#secondtolastrow
在使用數組時有很多操作和方式,我們會在后面介紹貫穿于本書所需要的操作。
1.3.2灰度變換
在讀入圖像到NumPy數組后,就可以對它進行任何我們想要的操作了。對圖像進行灰度變換便是一個簡單的例子。這里給出
一些進行灰度變換的例子:
#-*-coding:utf-8
fromPILimportImage
fromnumpyimport*
frompylabimport*
im=array(Image.open('../data/empire.jpg').convert('L'))
printint(im.min()),,int(im.max())
im2=255-im#invertimage
printint(im2.min()),int(im2.max())
im3=(100.0/255)*im+100#damptointervaL100...200
printint(im3?min()),int(im3.max())
im4=255.0*(im/255.0)**2#squared
printint(im4?min()),int(im4.max())
figure()
gray。
subplot(l,,3,1)
imshow(im2)
axis('off')
title(r'$f(x)=255-x$')
subplot(1,3,2)
imshow(im3)
axis('off')
title(r'$f(x)=\frac{100}{255}x+100$,)
subplot(lj3,3)
imshow(im4)
axis('off')
title(r'$f(x)=255(\frac{x}{255})A2$')
show()
上面左邊灰度變換函數采用的是f(x)=255-x,中間采用的是f(x)=(100/255)x+100,右邊采用的是變換函數是f(x)=255(x/255)A2。
運行上面代碼,可以得到P009Fig1-5中的結果:
/(a?)=255—cf⑺=擺,+100f⑺=255(短)2
正如上面代碼所示,你可以用通過下面命令檢查每幅圖像的最小值和最大值:
printint(im.min()),,int(im.max())
如果你對每幅圖像用到了打印最小像素值和最大像素值,你會得到下面的輸出結果:
2255
0253
100200
0255
1.3-3調整圖像尺寸
NumPy數組符成為我們對圖像及數據進行處理的最主要工具,但是調整矩陣大小并沒有一種簡單的方法。我們可以用PIUS
像對象轉換寫一個簡單的圖像尺寸調整函數:
defimresizeCim^sz):
"""ResizeanimagearrayusingPIL."""
pil_im=Image.fromarray(uint8(im))
returnarray(pil_im.resize(sz))
上面定義的調整函數,在imtools.py中你可以找到它。
1.3.3直方圖均衡化
一個極其有用的例子是灰度變換后進行直方圖均衡化。圖像均衡化作為預處理操作,在歸一化圖像強度時是一個很好的方
式,并且通過直方圖均衡化可以增加圖像對比度。下面是對圖像直方圖進行均衡化處理的例子:
#-*-coding:utf-8
fromPILimportImage
frompylabimport*
fromPCV.toolsimportimtools
#添加中文字體支持
frommatplotlib.font_managerimportFontProperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)
im=array(Image.open('../data/empire.jpg').convert('L'))#打開圖像,并轉成灰度圖像
=array(Image.open(r../data/AquaTermi_LOMContrast.JPG').convert('L'))
im2,cdf=imtools.histeq(im)
figure()
subplot(2j2,1)
axis('off')
gray。
原始圖像‘,fontproperties=font)
imshow(im)
subplot(2,2,2)
axis('off')
直方圖均衡化后的圖像‘,fontproperties=font)
imshow(im2)
subplot(2J2,3)
axis('off')
title(u,原始直方圖',fontproperties=font)
im.fLattenOj128,cumuLative=True,normed=True)
hist(im.flatten(),128,normed=True)
subplot(2,2,4)
axis('off')
title(u'均衡化后的直方圖',fontproperties=font)
#hist(im2.fLatten()J128,cumulative;True,normed=True)
hist(im2.flatten()>128,normed=True)
show()
運行上面代碼,可以得到書中的結果:
原始圖像直方圖均衡化后的圖像
原始直方圖均衡化后的直方圖
原始圖像直方圖均衡化后的圖像
原始直方圖均衡化后的直方圖
1.3.4圖像平均
對圖像取平均是一種圖像降噪的簡單方法,經常用于產生藝術效果。假設所有的圖像具有相同的尺寸,我們可以對圖像相同
位置的像素相加取平均,下面是一個演示對圖像取平均的例子:
#-*-coding:utf-8-*-
fromPCV.tools.imtoolsimportget_imlist
fromPILimportImage
frompylabimport*
fromPCV.toolsimportimtools
#添加中文字體支持
frommatplotlib.font_managerimportFontProperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc'\size=14)
filelist=get_imlist('../data/avg/')#獲取convert_tmages_format_test文件夾下的圖片文件名(包括后綴
名)
avg=pute_average(filelist)
forimpathinfilelist:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度光伏產品模具研發(fā)制造合同4篇
- 2025年度寵物用品跨境電商合作合同4篇
- 2025年度環(huán)保工程派遣員工勞動合同樣本4篇
- 2025版綿陽市醫(yī)療機構租賃合同4篇
- 2025年度城市綜合體施工合同(含裝修工程)2篇
- 2025年美團外賣騎手服務區(qū)域劃分合同
- 2025年冷鏈物流送貨員專業(yè)培訓及聘用合同
- 二零二五年度農業(yè)產業(yè)鏈借貸合同協(xié)議
- 二零二五年度太陽能光伏電站設備保險與理賠合同
- 2025年度智能家居租賃運營合同3篇
- 柴油墊資合同模板
- 湖北省五市州2023-2024學年高一下學期期末聯(lián)考數學試題
- 城市作戰(zhàn)案例研究報告
- 【正版授權】 ISO 12803:1997 EN Representative sampling of plutonium nitrate solutions for determination of plutonium concentration
- 道德經全文及注釋
- 2024中考考前地理沖刺卷及答案(含答題卡)
- 多子女贍養(yǎng)老人協(xié)議書范文
- 安踏運動品牌營銷策略研究
- 彩票市場銷售計劃書
- 骨科抗菌藥物應用分析報告
- 支付行業(yè)反洗錢與反恐怖融資
評論
0/150
提交評論