版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ProgrammingComputerVisionwithPython
安裝
。1需要準(zhǔn)備的安裝包
。2安裝Pvthon(xy)
03安裝PCV庫
0.4VLfeat
為順利幫助讀者完成本書中實(shí)例的學(xué)習(xí),譯者已對(duì)代碼做了相應(yīng)整理,下面給出在對(duì)本書實(shí)例學(xué)習(xí)前,你需要做的前期安裝
工作。注意,下面譯者給出的安裝過程是針對(duì)Windows下的,其他平臺(tái)如Linux、Mac請(qǐng)查閱中譯本附錄。
0.1需要準(zhǔn)備的安裝包
要完整復(fù)現(xiàn)書中的實(shí)例,你需要的主要四個(gè)文件包括Python(x,y)2.7.x安裝包、PCV庫、VLfeat
(/download.html評(píng)口本書用到的數(shù)據(jù)庫。Pvthon(x.v)可以在GoogleCode
((https://code.aooqle.eom/p/pvthonxv/)),PCV庫、本書整理出來的實(shí)例代碼以及本書用到的所有圖像數(shù)據(jù)可以從苴頁
(http:〃/pcvwithpvthon/)給出的鏈接下載。
0.2安裝Python(x,y)
在Windows下,譯者推薦你安裝Python(x,y)2.7.x。Python(x,y)2.7.x是一個(gè)庫安裝包,除了包含Python自身外,還包含了很
多第三方庫,下面是安裝Python(x,y)時(shí)的界面:
#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,還包含了機(jī)器學(xué)習(xí)庫
scikits-learno為避免出現(xiàn)運(yùn)行實(shí)例時(shí)出現(xiàn)的依賴問題,譯者建議將上面的庫全部選上,也就是選擇“full”(譯者也是用的全部
安裝的方式進(jìn)行后面的實(shí)驗(yàn)的)。安裝完成后,為驗(yàn)證安裝是否正確,可以在Pythonshell里確認(rèn)一下OpenCV是否已安裝來
進(jìn)行驗(yàn)證,在PythonShell里輸入下面命令:
fromcv2import_version_
_version_
輸入上面命令,如果可以看到OpenCV的版本信息,則說明python(x,y)已安裝正確。
另外,需要提醒讀者的是,Python是沒有平臺(tái)區(qū)分的,這里指的平臺(tái)不是指Linux和Mac這樣的平臺(tái)概念,而是在Windows
上沒有位數(shù)的區(qū)分。舉個(gè)簡單的例子,比如你是64位的Windows系統(tǒng),你可以安裝32位的Python。對(duì)于這一部分的詳細(xì)說
明,可以參閱譯者的一篇博文Diango配置MySQL(httpj//blog/config-mysal-for-diango.html)最后一段的說
明。好了,關(guān)于Python(x,y)的安裝說明就說到這里。
0.3安裝PCV庫
PCV庫是原書作者寫的一個(gè)第三方庫,書中幾乎所有的實(shí)例到要用到改庫。假設(shè)你已從下載本書由譯者整理的中譯版源碼,
從Windowsemd終端進(jìn)入PCV所在目錄:
cdPCV
pythonsetup.pyinstall
運(yùn)行上面命令,即可完成PCV庫的安裝。為了驗(yàn)證PCV庫是否安裝成功,在運(yùn)行上面命令后,可以打開Python自帶的
Shell,在Shell輸入:
importPCV
如果未報(bào)錯(cuò),則表明你已成功安裝了該P(yáng)CV庫。
0.4VLfeat
VLFeat是一個(gè)跨平臺(tái)的開源機(jī)器視覺庫,它囊括了當(dāng)前流行的機(jī)器視覺算法,如SIFT,MSER,HOG,同時(shí)還包含了諸如K-
MEANS,HierarchicalK-means的聚類算法。本書中主要在提取sift特征時(shí)用到了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
如上圖所示,從紅色框標(biāo)的地方下載VLFeat,解壓:
?Works(D:)?/盤H?Sci_codes?vlfeat-0.9.17-bin?vlfeat-0.9.17?bin?
/)I*(T)幫助(H)
共享▼新建文件夾
ll
glnx86glnxa64macimaci64Win32win64
你需要的僅是對(duì)應(yīng)平臺(tái)的可執(zhí)行文件,譯者系統(tǒng)是32位的,所以選用的是Win32。注意目前VLFeat最新發(fā)布版已到0.9.18
了。對(duì)于0.9.18,目錄結(jié)構(gòu)和0.9.17的一樣,所以你也僅需bin下對(duì)應(yīng)的文件夾下的可執(zhí)行文件。將該Win32拷貝到你想放置
的某個(gè)目錄,譯者將其放置在計(jì)算機(jī)的如下目錄:
?Works(D:)?mltools?
V)I*(T)幫助(H)
共享▼新建文件夾
PCVpython-grwin32vlfea
aph-core-
1.8.2
需要注意的是,譯者將原來的“bin”文件名重新"winSZvIfeat"。完成該步驟后,進(jìn)入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()調(diào)用外部可執(zhí)行文件,也就是Vlfeatbin目錄下的sift.exe。
好了,安裝完后,你便可以運(yùn)行書中的大部分實(shí)例代碼了。這里之所以是“大部分”是因?yàn)闀械哪承?shí)例,還要用到別的
庫。
?作者譯者(author.html)第一章圖像處理基礎(chǔ)》(chaoterl.html)
。。
?2014YonaYuan(http:〃vuanvonci.orQ)保留部分權(quán)力。在線閱讀版本基于“CC3.0BY-SA協(xié)議"(http:〃creativecommons.ora/licenses/bv-sa/3.0/)發(fā)
布
ProgrammingComputerVisionwithPython
第一章圖像處理基礎(chǔ)
1.1PIL-Pvthon圖像庫
1.1.1對(duì)圖片進(jìn)行格式轉(zhuǎn)換
1.1.2創(chuàng)建縮略圖
1.1.3拷貝并粘貼區(qū)域
1.1.4調(diào)整尺寸及旋轉(zhuǎn)
1.2MatDlotlib庫
1.2.1畫圖、描點(diǎn)和線
1.2.2圖像輪廓和直方圖
1.2.4交互注釋
1.3NumPy庫
1.3.1圖像數(shù)組表示
1.3.2灰度變換
1.3-3調(diào)整圖像尺寸
133直方圖均衡化
1.3.4圖像平均
1.3.5對(duì)圖像進(jìn)行主成分分析
1.3.6Pickle模塊
1.4SciPv模塊
1.4.1圖像模糊
1.4.2圖像差分
1.4.3形態(tài)學(xué)-物體計(jì)數(shù)
1.4.4有用的SciPv模塊
1.5更高級(jí)的例子:圖像降噪
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()
運(yùn)行上面的代碼,可以得出原書P002-Fig1-1中的前兩幅圖片,如下:
更多關(guān)于PIL的實(shí)例,可以參閱PIL在線文檔fwww./librarv/pil/handbook/index.htm./l
(http:〃/library/pil/handbook/index.htm)。
1.1.1對(duì)圖片進(jìn)行格式轉(zhuǎn)換
利用save()方法,PIL可以將圖片保存問很多不同的圖像格式。下面演示原書P002中對(duì)圖片進(jìn)行轉(zhuǎn)換的例子。
#-*-coding:utf-8
fromPCV.tools.imtoolsimportget_imlist#導(dǎo)入原書的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"#分離文件名與擴(kuò)展名
ifinfile!=outfile:
try:
Image.open(infile).save(outfile)
exceptlOError:
print"cannotconvert",infile
上面3^0代而2965b舊211651文件夾是譯者放的測(cè)試圖片,共24幅圖像,如下圖示,測(cè)試圖片全部為.jpg格式的。譯者在
源代碼中添加了部分代碼以便將獲取的圖像文件名列表保存下來,同時(shí)將原來的所有圖像轉(zhuǎn)化為.png格式的圖像。注意,
在載入模塊時(shí),載入了原書的PCV模塊,關(guān)于PCV模塊的安裝,詳見[PCV模塊的安裝1。運(yùn)行上面代碼,可以得到轉(zhuǎn)化格式后
的圖像,運(yùn)行結(jié)果為:
?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格式轉(zhuǎn)化為PNG格式后的圖像
童
ukbeftchOukbenchOukbenchOukbmchOukb?fxhOukbetxhOukb?<KhOukbeochOukbenchOukbenchOukb?nchOukbeocH)
0000.pr>9OOOl.pngOOO2.pn90001吟0004.pr^0005,po9OOO&pn90007.pr?9OOOa-png0009.pn9OOIO.P09OOltpng
時(shí)跟睡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)建縮略圖,設(shè)置縮略圖的大小,并用元組保存起來,調(diào)用thumnail。方法即可生成縮略圖。創(chuàng)建縮略
圖的代碼見下面。
1.1.3拷貝并粘貼區(qū)域
調(diào)用crop。方法即可從一幅圖像中進(jìn)行區(qū)域拷貝,拷貝出區(qū)域后,可以對(duì)區(qū)域進(jìn)行旋轉(zhuǎn)等變換。關(guān)于拷貝、旋轉(zhuǎn)粘貼的代碼
見下面。
1.1.4調(diào)整尺寸及旋轉(zhuǎn)
要對(duì)一幅圖像的尺寸進(jìn)行調(diào)整,可以調(diào)用resize。方法,元組中放置的便是你要調(diào)整尺寸的大小。如果要對(duì)圖像進(jìn)行旋轉(zhuǎn)變換
的話,可以調(diào)用rotate。方法。
下面代碼顯示上面提到的所有的圖像處理操作,即原圖顯示、RGB圖像轉(zhuǎn)為灰度圖像、拷貝粘貼區(qū)域、生成縮略圖、調(diào)整圖
像尺寸、圖像旋轉(zhuǎn)變換的實(shí)例代碼:
#-*-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')#保存縮略圖
#調(diào)整圖像尺寸
pil_im=Image.open('../data/empire.jpg')
pil_im=pil_im.resize(size)
printpil__im.size
subplot(235)
title(u'調(diào)整尺寸后的圖像’,fontproperties=font)
axis('off')
imshow(pil_im)
#旋轉(zhuǎn)圖^^45。
pil_im=Image.open('../data/empire.jpg')
pil_im=pil_im.rotate(45)
subplot(236)
旋轉(zhuǎn)45。后的圖像',fontproperties=font)
axis('off')
imshow(pil_im)
show()
運(yùn)行上面代碼,可得P002Figure中出現(xiàn)的所有實(shí)例圖,結(jié)果如下:
原圖灰度圖拷貝粘貼區(qū)域
縮略圖旋轉(zhuǎn)45°后的圖像
調(diào)整尺寸后的圖像
1.2Matplotlib庫
當(dāng)在處理數(shù)學(xué)及繪圖或在圖像上描點(diǎn)、畫直線、曲線時(shí),Matplotlib是一個(gè)很好的繪圖庫,它比PIL庫提供了更有力的特性。
Matplotlib是開源的,可以在[matD](http:〃/)上下載.并且它還提供了詳細(xì)
的文檔及教程。這里,會(huì)展示一些我們?cè)诒緯竺鏁?huì)用到的函數(shù)的一些實(shí)例。
1.2.1畫圖、描點(diǎn)和線
雖然Matplotlib可以創(chuàng)建漂亮的條狀圖、餅圖、散點(diǎn)圖等,但是在很多計(jì)算機(jī)視覺應(yīng)用場(chǎng)合,其實(shí)只用到了一些常用的命
令。下面展示在一幅圖像上描一些點(diǎn)和畫一條直線的例子。
#-*-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()
#畫有坐標(biāo)軸的
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)
#不顯示坐標(biāo)軸
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')#顯示坐標(biāo)軸
title(u'繪圖:"empire.jpg",,fontproperties=font)
show()
運(yùn)行上面代碼,即可得原書P005中Figure1-2中左邊的結(jié)果。去掉上面代碼中坐標(biāo)軸的注釋,即可得Figure1-2中右邊的結(jié)
果。運(yùn)行結(jié)果如下:
繪圖:"empire.jpg”
-100
0
100
200
300
400
500
600
700
8嗚000100200300400500600
1.2.2圖像輪廓和直方圖
下面我們看兩個(gè)特別的例子:圖像輪廓線和圖線等高線。在畫圖像輪廓前需要轉(zhuǎn)換為灰度圖像,因?yàn)檩喞枰@取每個(gè)坐標(biāo)
[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'))#打開圖像,并轉(zhuǎn)成灰度圖像
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()
運(yùn)行上面代碼,可以得到書中的圖1-3所示的結(jié)果:
困像輪廓圖像直方圖
10000
1.2.4交互注釋
有時(shí),用戶需要和應(yīng)用進(jìn)行交互,比如在圖像中用點(diǎn)做標(biāo)識(shí),或者在一些訓(xùn)練數(shù)據(jù)中進(jìn)行注釋。PyLab提供了一個(gè)很簡潔好
用的函數(shù)ginput。,它可以完成該任務(wù),下面是一個(gè)演示交互注釋的簡短示例:
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。交互注釋,這里設(shè)置的交互注釋數(shù)據(jù)點(diǎn)設(shè)置為3個(gè),用戶
在注釋后,會(huì)將注釋點(diǎn)的坐標(biāo)打印出來。
1.3NumPy庫
NumPy(httD:〃www.sciQy.or?g/NumPy/)是Pvthon一個(gè)流行的用于科學(xué)計(jì)算包。它包含了很多諸如矢量、矩陣、圖像等其他
非常有用的對(duì)象和線性代數(shù)函數(shù)。在本書中幾乎所有的例子都用到了NumPy數(shù)組對(duì)象。NumPv可以在sciD/Download]
(http:〃/Download)下載,在線文檔(http:〃docs.sciDy.orq/doc/numDy/)包含了很多常見問題的答案。
1.3.1圖像數(shù)組表示
在前面載入圖像的示例中,我們將圖像用array。函數(shù)轉(zhuǎn)為NumPy數(shù)組對(duì)象,但是并沒有提到它表示的含義。數(shù)組就像列表一
樣,只不過它規(guī)定了數(shù)組中的所有元素必須是相同的類型。下面的例子用于說明圖像數(shù)組表示:
#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
運(yùn)行上面代碼,會(huì)給出下面結(jié)果:
(800,569,3)uint8
(800,569)float32
數(shù)組可以通過索引訪問和操作其中的元素。比如:value=im[i,j,k]。i,j是坐標(biāo),k是顏色通道。對(duì)于多個(gè)元素,可以用切片操
作,如:
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
在使用數(shù)組時(shí)有很多操作和方式,我們會(huì)在后面介紹貫穿于本書所需要的操作。
1.3.2灰度變換
在讀入圖像到NumPy數(shù)組后,就可以對(duì)它進(jìn)行任何我們想要的操作了。對(duì)圖像進(jìn)行灰度變換便是一個(gè)簡單的例子。這里給出
一些進(jìn)行灰度變換的例子:
#-*-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()
上面左邊灰度變換函數(shù)采用的是f(x)=255-x,中間采用的是f(x)=(100/255)x+100,右邊采用的是變換函數(shù)是f(x)=255(x/255)A2。
運(yùn)行上面代碼,可以得到P009Fig1-5中的結(jié)果:
/(a?)=255—cf⑺=擺,+100f⑺=255(短)2
正如上面代碼所示,你可以用通過下面命令檢查每幅圖像的最小值和最大值:
printint(im.min()),,int(im.max())
如果你對(duì)每幅圖像用到了打印最小像素值和最大像素值,你會(huì)得到下面的輸出結(jié)果:
2255
0253
100200
0255
1.3-3調(diào)整圖像尺寸
NumPy數(shù)組符成為我們對(duì)圖像及數(shù)據(jù)進(jìn)行處理的最主要工具,但是調(diào)整矩陣大小并沒有一種簡單的方法。我們可以用PIUS
像對(duì)象轉(zhuǎn)換寫一個(gè)簡單的圖像尺寸調(diào)整函數(shù):
defimresizeCim^sz):
"""ResizeanimagearrayusingPIL."""
pil_im=Image.fromarray(uint8(im))
returnarray(pil_im.resize(sz))
上面定義的調(diào)整函數(shù),在imtools.py中你可以找到它。
1.3.3直方圖均衡化
一個(gè)極其有用的例子是灰度變換后進(jìn)行直方圖均衡化。圖像均衡化作為預(yù)處理操作,在歸一化圖像強(qiáng)度時(shí)是一個(gè)很好的方
式,并且通過直方圖均衡化可以增加圖像對(duì)比度。下面是對(duì)圖像直方圖進(jìn)行均衡化處理的例子:
#-*-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'))#打開圖像,并轉(zhuǎn)成灰度圖像
=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()
運(yùn)行上面代碼,可以得到書中的結(jié)果:
原始圖像直方圖均衡化后的圖像
原始直方圖均衡化后的直方圖
原始圖像直方圖均衡化后的圖像
原始直方圖均衡化后的直方圖
1.3.4圖像平均
對(duì)圖像取平均是一種圖像降噪的簡單方法,經(jīng)常用于產(chǎn)生藝術(shù)效果。假設(shè)所有的圖像具有相同的尺寸,我們可以對(duì)圖像相同
位置的像素相加取平均,下面是一個(gè)演示對(duì)圖像取平均的例子:
#-*-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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品安裝及質(zhì)量保障措施
- 施工安全與環(huán)境保護(hù)
- 二零二五年度鋼結(jié)構(gòu)建筑室內(nèi)裝修材料供應(yīng)合同3篇
- 人教版三年級(jí)上冊(cè)語文30一次成功實(shí)驗(yàn)課件
- 2024年海南衛(wèi)生健康職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2024年海南體育職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 2024年浙江電力職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2024年浙江汽車職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(頻考版)含答案解析
- 幼兒園午托服務(wù)項(xiàng)目方案
- 2024年浙江農(nóng)業(yè)商貿(mào)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫含答案解析
- 園林綠化風(fēng)險(xiǎn)因素辨識(shí)及防控措施
- 譯林版一年級(jí)英語上冊(cè)全套ppt
- 教師教學(xué)常規(guī)管理培訓(xùn)夯實(shí)教學(xué)常規(guī)強(qiáng)化教學(xué)管理PPT教學(xué)課件
- 公務(wù)員考試工信部面試真題及解析
- GB/T 15593-2020輸血(液)器具用聚氯乙烯塑料
- 2023年上海英語高考卷及答案完整版
- 西北農(nóng)林科技大學(xué)高等數(shù)學(xué)期末考試試卷(含答案)
- 金紅葉紙業(yè)簡介-2 -紙品及產(chǎn)品知識(shí)
- 《連鎖經(jīng)營管理》課程教學(xué)大綱
- 《畢淑敏文集》電子書
- 頸椎JOA評(píng)分 表格
評(píng)論
0/150
提交評(píng)論