圖像處理算法及其Python實(shí)踐 課件全套 張曉燕第1-9章 Python 程序設(shè)計(jì)基礎(chǔ) -圖像描述_第1頁
圖像處理算法及其Python實(shí)踐 課件全套 張曉燕第1-9章 Python 程序設(shè)計(jì)基礎(chǔ) -圖像描述_第2頁
圖像處理算法及其Python實(shí)踐 課件全套 張曉燕第1-9章 Python 程序設(shè)計(jì)基礎(chǔ) -圖像描述_第3頁
圖像處理算法及其Python實(shí)踐 課件全套 張曉燕第1-9章 Python 程序設(shè)計(jì)基礎(chǔ) -圖像描述_第4頁
圖像處理算法及其Python實(shí)踐 課件全套 張曉燕第1-9章 Python 程序設(shè)計(jì)基礎(chǔ) -圖像描述_第5頁
已閱讀5頁,還剩403頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

圖像處理算法及其Python實(shí)踐第1章Python程序設(shè)計(jì)基礎(chǔ)第2章Python圖像處理基礎(chǔ)第3章深度學(xué)習(xí)基礎(chǔ)第4章圖像分類第5章圖像分割第6章目標(biāo)檢測第7章人臉識別第8章圖像風(fēng)格遷移第9章圖像描述第1章Python程序設(shè)計(jì)基礎(chǔ)1.1Python語言快速入門1.2Python語法速覽1.3類與模塊1.4圖像界面設(shè)計(jì)1.1Python語言快速入門Python語言是一門動(dòng)態(tài)類型的解釋型語言。作為解釋型語言,Python不像C++、C語言那樣在運(yùn)行之前要通過編譯器進(jìn)行漫長的編譯過程生成二進(jìn)制文件后才能運(yùn)行,Python程序只需要在運(yùn)行的操作系統(tǒng)上安裝Python解釋器就可以運(yùn)行,Python解釋器會將代碼逐行解釋為機(jī)器碼后再運(yùn)行。雖然Python語言被歸為腳本語言,但是它相比于ShellScript、VBScript等腳本語言只能處理簡單的任務(wù),Python幾乎可以處理所有計(jì)算機(jī)處理的任務(wù)。Python的設(shè)計(jì)強(qiáng)調(diào)代碼的可讀性和簡潔的語法。相對于C++、Java語言,Python的代碼更加簡潔清晰。其缺點(diǎn)也很明顯,運(yùn)行效率沒有前面兩者那么高效,但在大部分情況下,Python的運(yùn)行效率完全能滿足需求。在大型的工程項(xiàng)目中,對于性能要求極高的部分,會使用C或C++等語言開發(fā),然后使用Python調(diào)用相應(yīng)的模塊。因此,很多人都把Python當(dāng)作一種“膠水語言”使用。1.1.1Python的版本與安裝1.Python的實(shí)現(xiàn)版本1)CPython。這是由Python軟件基金會創(chuàng)建的官方標(biāo)準(zhǔn)的Python解釋器,也是最流行的Python解釋器。2)ActivePython。這是由ActiveState公司發(fā)行的一套企業(yè)級二進(jìn)制Python編程調(diào)試工具,帶有集成開發(fā)環(huán)境IDE(IntegratedDevelopmentEnvironment)。ActivePython有三個(gè)發(fā)行版本:社區(qū)版、商業(yè)版和企業(yè)版,適用于windows和Linux操作系統(tǒng),并和其他Python實(shí)現(xiàn)兼容。3)Anaconda。Python語言的主要用途就是數(shù)據(jù)分析和機(jī)器學(xué)習(xí)。當(dāng)使用Anaconda進(jìn)行數(shù)據(jù)科學(xué)和科學(xué)計(jì)算時(shí),可以輕松創(chuàng)建和管理Python和R環(huán)境,以確保庫和依賴項(xiàng)的有效管理,同時(shí)保持版本兼容性。1.1.1Python的版本與安裝2.Python的開發(fā)工具1)VSCode。VSCode是由微軟開發(fā)的,同時(shí)支持Windows、Linux和MacOS操作系統(tǒng)且開放源代碼的文本編輯器。它支持程序調(diào)試,并內(nèi)置了Git版本控制功能,同時(shí)也具有開發(fā)環(huán)境功能,如代碼補(bǔ)全、代碼片段、代碼重構(gòu)等。該編輯器支持用戶自定義配置,還支持?jǐn)U展程序并在編輯器內(nèi)置了擴(kuò)展程序管理功能。2)PyCharm。PyCharm是由JetBrains公司開發(fā)的一款I(lǐng)DE工具,它集成了一些系列開發(fā)功能,如Python包管理、虛擬環(huán)境管理、框架整合和Git等。PyCharm大大節(jié)省了程序開發(fā)時(shí)間,程序運(yùn)行更快捷,且代碼可以自動(dòng)更新格式,并支持多種操作系統(tǒng)。1.1.1Python的版本與安裝3.Python解釋器和文本編輯器VSCode的下載安裝登錄Python官方網(wǎng)站(/),如圖1-1所示。點(diǎn)擊Downloads->windows,下拉選擇需要的版本,如圖1-2所示。圖1-2版本選擇界面圖1-1Python官網(wǎng)界面1.1.1Python的版本與安裝Python解釋器和文本編輯器VSCode的下載安裝下載后雙擊打開,勾選添加到環(huán)境變量,開始安裝,如圖所示。圖1-3添加到環(huán)境變量1.1.1Python的版本與安裝Python解釋器和文本編輯器VSCode的下載安裝安裝完成Python解釋器后,進(jìn)VSCode官網(wǎng)(/)安裝文本編輯器。圖1-4選擇相應(yīng)版本安裝VSCode1.1.1Python的版本與安裝Python解釋器和文本編輯器VSCode的下載安裝安裝完成之后,雙擊打開,在左側(cè)的搜索欄中輸入Python,安裝Python擴(kuò)展,如圖所示。至此,Python解釋器與文本編輯器安裝完畢。圖1-5在VSCode中進(jìn)行Python擴(kuò)展1.1.1Python的版本與安裝Python解釋器和文本編輯器VSCode的下載安裝按下鍵盤上的Win+R鍵,輸入cmd命令進(jìn)入MS-DOS界面,輸入python,顯示版本為3.8.1,表明python已經(jīng)正確安裝。圖1-6MSDOS界面1.1.1Python的版本與安裝4.集成開發(fā)環(huán)境Pycharm下載安裝PyCharm是JetBrains開發(fā)的一個(gè)流行的Python集成開發(fā)環(huán)境(IDE),提供了強(qiáng)大的編輯、調(diào)試和開發(fā)功能。以下是下載和安裝PyCharm的步驟:(1)打開瀏覽器,訪問PyCharm官方下載網(wǎng)站,網(wǎng)址如下所示:/en-us/pycharm/(2)點(diǎn)擊“下載”按鈕,選擇與你的操作系統(tǒng)(Windows、macOS或Linux)相對應(yīng)的安裝包。(3)下載完成后,雙擊.exe安裝文件,啟動(dòng)安裝程序。按照安裝向?qū)У牟襟E進(jìn)行安裝。你可以選擇安裝路徑,創(chuàng)建桌面快捷方式,并選擇添加到系統(tǒng)PATH環(huán)境變量中。1.1.2編寫簡單的Python程序首先,按下鍵盤上的Win+R,輸入cmd命令進(jìn)入MSDOS界面,輸入python,顯示版本為3.8.1,表明python已經(jīng)正確安裝。從終端運(yùn)行程序。在>>>后面即可輸入簡單的Python代碼片段。輸入“print(”HelloWorld!“)”,并按下回車鍵,輸出結(jié)果如圖1-7所示。圖1-7從終端運(yùn)行程序1.1.3編輯和運(yùn)行復(fù)雜的Python程序使用VSCode軟件編寫Python代碼,在VSCode中點(diǎn)擊“新建文件”按鈕,輸入文件名,例如demo.py,在新創(chuàng)建的demo.py文件中,輸入程序“print("HelloVSCode!")”,輸出結(jié)果如下圖1-8所示。圖1-8在VSCode中運(yùn)行程序1.1.3編輯和運(yùn)行復(fù)雜的Python程序使用Pycharm編寫Python程序,打開PyCharm點(diǎn)擊“CreateNewProject”,選擇項(xiàng)目位置和Python解釋器,點(diǎn)擊“Create”。在項(xiàng)目視圖中右鍵項(xiàng)目目錄,選擇“New”->“PythonFile”,輸入文件名(如hello.py)。在hello.py文件中輸入:保存為first.py,并運(yùn)行,輸出如下:message1="pythonworld"message=f"Hello,welcometo{message1.title()}!"print(message)print("Herewego!")Hello,welcometoPythonWorld!Herewego!1.2Python語法速覽本節(jié)將介紹Python語言中的一些基本語法,如一些基本的數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)與簡單的函數(shù)使用等。1.2.1數(shù)據(jù)類型本節(jié)將介紹Python語言中的一些基本語法,如一些基本的數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)與簡單的函數(shù)使用等。在Python中,常見的數(shù)據(jù)類型有整型、浮點(diǎn)型、字符串和布爾型,如下表1-1。表1-2列出了Python常用的運(yùn)算符。數(shù)據(jù)類型示例整型-2,-1,0,1,2,3浮點(diǎn)型-1.1,-1.4,3.14,1.414字符串‘a(chǎn)’,’Hello’,’aa’,’hello’布爾型其值只有兩個(gè),即False和True操作符描述示例+加法a+b-減法a-b*乘法a*b/除法a/b%取模a%b**指數(shù)運(yùn)算a**b//取商的整數(shù)部分a//b==相等a==b!=不相等a!=b>=,<=大于等于,小于等于a>=b,a<=b&按位與a&b|按位或a|b^按位異或a^b~按位取反a~b<<左移運(yùn)算符,左操作按位左移右操作數(shù)指定位數(shù)a<<b>>右移運(yùn)算符,左操作按位右移右操作數(shù)指定位數(shù)a>>bAnd邏輯與aandbOr邏輯或aorbNot邏輯非nota表1-1表1-21.2.1數(shù)據(jù)類型Python中,在數(shù)學(xué)表達(dá)式中含有浮點(diǎn)數(shù)時(shí),輸出結(jié)果一定也是浮點(diǎn)數(shù),有時(shí)候包含的小數(shù)位數(shù)是不確定的。在除法運(yùn)算時(shí),輸出結(jié)果也一定是浮點(diǎn)數(shù),即便能夠被整除。除了整數(shù)和浮點(diǎn)型數(shù)據(jù),Python還可以處理字符串。在Python中可以用“‘’”或“”“”括起來代表字符串,也可以使用“\”操作符來對特殊字符轉(zhuǎn)義。例如“\’‘”表示為單引號,“\n”表示為換行符,“\t”為制表符。下面是命令行中演示一些字符處理的例子1.2.1數(shù)據(jù)類型Python中,可以使用“+”拼接兩個(gè)字符串,使用“*”來重復(fù)字符串。當(dāng)多個(gè)字符串相鄰時(shí),解釋器會自動(dòng)合并。如下:>>>a="Hello">>>b="World">>>a+b‘HelloWorld’>>>'Hello''World'‘HelloWorld’>>>2*'A'+'pple'‘Aapple1.2.1數(shù)據(jù)類型Python可以通過“索引”方式來獲取字符串中某個(gè)位置的字符。>>>a='fragrant'>>>a[0]‘f’>>>a[0]+a[5]‘fa’>>>a[-1]‘t’>>>a[-6]‘a(chǎn)’>>>a[-8]‘f’

1.2.1數(shù)據(jù)類型索引為正數(shù)時(shí),從字符串左邊向右查找(0和-0都表示第一個(gè)字符)。當(dāng)索引為負(fù)數(shù)時(shí),從字符串右邊向左查找。(最右邊的索引為-1,并依次向左為-2,-3...)。想要獲取字符串中的一段字符串,可以通過如下“切片”操作來實(shí)現(xiàn)。>>>a='water'>>>a[0:3]‘wat’>>>a[:3]‘wat’>>>a[1:]‘a(chǎn)ter’1.2.2列表與元組列表是由一系列按特定順序排列的元素組成,列表通常包含多個(gè)元素,非常適合用于存儲在程序運(yùn)行期間可能變化的數(shù)據(jù)集。在Python中,用方括號[]表示列表,并用逗號分割其中的元素。下面是一個(gè)簡單的列表示例。打印出來的結(jié)果包括方括號,輸出如下:app=['a','b','c','d’]print(app)['a','b','c','d']1.2.2列表與元組訪問列表元素,可以通過索引的方式訪問任意元素。輸出結(jié)果如下:app=['a','b','c','d']print(app[0])print(app[1])print(app[-1])abd1.2.2列表與元組在Python語言中第一個(gè)元素索引為0而不是1,大多數(shù)編程語言都是這么規(guī)定的。此外,Python語言還通過設(shè)定最后一個(gè)元素的索引為-1來訪問列表的最后一個(gè)元素。修改列表元素的值,通過指定列表名和對應(yīng)元素的索引,對其重新賦值。示例代碼如下:app=['a','b','c','d']print(app)app[0]='apple’print(app)['a','b','c','d’]['apple','b','c','d']輸出結(jié)果如下:1.2.2列表與元組在列表末尾添加元素,可使用方法append()。演示示例代碼如下:app=['red','yellow','blue','green']print(app)app.append('black’)print(app)['red','yellow','blue','green']['red','yellow','blue','green','black']輸出結(jié)果如下:1.2.2列表與元組如果想要在列表任意位置插入元素,可使用方法insert()將相應(yīng)的元素插入到相應(yīng)的位置。app=['red','yellow','blue','green']print(app)app.insert(1,'black')app.insert(5,'white')print(app)['red','yellow','blue','green']['red','black','yellow','blue','green','white']輸出結(jié)果如下:1.2.2列表與元組在Python中,知道列表元素的索引,可使用del語句刪除元素。app=['red','yellow','blue','green']print(app)delapp[1]print(app)['red','yellow','blue','green']['red','blue','green']輸出結(jié)果如下:1.2.2列表與元組還可以使用pop()方法刪除列表末尾元素。app=['red','yellow','blue','green']print(app)app.pop()print(app)['red','yellow','blue','green']['red','yellow','blue']輸出結(jié)果如下:pop()方法還可以用來刪除指定位置的元素。只需要在()中添加對應(yīng)元素的索引即可。1.2.2列表與元組元組與列表十分相似,大部分方法都通用,但是元組和列表的最大區(qū)別是列表可以修改,可以刪除,而元組不能修改,不能刪除單個(gè)元素,但是可以刪除整個(gè)元組。元組定義和列表類似,元組定義時(shí)只需用“()”把元素括起來,并用“,”把元素隔開。下面定義一個(gè)元組,訪問其中一個(gè)元素,并將元組打印出來。app=('apple','peach','mango','grape')print("Myfavoritefruitis",app[3])print(app)Myfavoritefruitisgrape('apple','peach','mango','grape')輸出結(jié)果如下:1.2.2列表與元組如果定義只包含一個(gè)元素的元組,必須在這個(gè)元素后面加上一個(gè)“,”,否則元素還是原來的類型。app1=('apple')print(type(app1))app2=('apple',)print(type(app2))<class'str'><class'tuple'>輸出結(jié)果如下:由輸出結(jié)果知,app1為str字符串類型,而app2為tuple元組類型。1.2.2列表與元組由于元組不能修改,所以元組不能單獨(dú)刪除部分元素,只能刪除整個(gè)元組。示例代碼如下:app=('apple','peach','mango','grape')print(app)app[1]='orange'print(app)('apple','peach','mango','grape')TypeError:'tuple'objectdoesnotsupportitemassignment輸出結(jié)果如下:在執(zhí)行第三行代碼修改元組元素時(shí),輸出會報(bào)錯(cuò),顯示元組類型不支持修改元素。元組不能刪除單個(gè)元素,但可以執(zhí)行del語句整體刪除。1.2.3字典與集合在Python語言中,字典(dict)是一系列鍵值對。每個(gè)鍵都有一個(gè)值關(guān)聯(lián),可以使用鍵來訪問關(guān)聯(lián)的值。與鍵關(guān)聯(lián)的值可以是數(shù)值、字符串、列表乃至是字典。任何Python對象都可用作于字典中的值。在Python語言中,字典用放在花括號{}中的一系列鍵值對表示,鍵和值之間用冒號分隔,而鍵值對之間用逗號分隔。下面定義一列表,并將其打印出來。fruit={'Joe':'apple','Michael':'peach','Tony':'mango','Maria':'grape'}print(fruit)輸出結(jié)果如下:{'Joe':'apple','Michael':'peach','Tony':'mango','Maria':'grape'}1.2.3字典與集合訪問字典中的值,可通過字典名和對應(yīng)的鍵來獲取,如獲取鍵“Joe”對應(yīng)的值,可以用如下代碼實(shí)現(xiàn)print(fruit['Joe'])輸出結(jié)果:applefruit={'Joe':'apple','Michael':'peach'}fruit['Tony']='mango'#添加Tony鍵delfruit['Joe']#刪除Joe鍵還可以將字典中的值賦值給其他變量使用,也可以通過上面的方式去修改鍵對應(yīng)的值。字典是一種動(dòng)態(tài)結(jié)構(gòu),可隨時(shí)在其中添加和刪除鍵值對。只要依次指定字典名、用方括號括起來的鍵和相關(guān)聯(lián)的值就可以在字典末尾添加上一個(gè)鍵值對。使用del語句,指定字典名和要?jiǎng)h除的鍵,就可以刪除鍵值對。示例代碼如下:1.2.3字典與集合一個(gè)Python字典可能只包含幾個(gè)鍵值對,也可能包含含有幾百萬個(gè)鍵值對。因此Python支持對字典的遍歷,遍歷的方式有多種。可遍歷字典的所有鍵值對,也可僅遍歷鍵或值。在遍歷所有鍵值對可使用方法items(),它返回一個(gè)鍵值隊(duì)列表。使用for循環(huán)依次將每個(gè)鍵值對賦給指定的兩個(gè)變量。示例代碼如下:fruit={'Joe':'apple','Michael':'peach','Tony':'mango','Maria':'grape'}forkeys,valuesinfruit.items():#將鍵值對賦值給兩個(gè)變量print(keys,values)1.2.3字典與集合輸出結(jié)果如下:JoeappleMichaelpeachTonymangoMariagrape在遍歷鍵時(shí)只要使用方法keys(),就可訪問字典中的所有鍵。使用values()方法,就可訪問字典中所有鍵所對應(yīng)的值。示例代碼如下:forkeyinfruit.keys():#在for循環(huán)中依次將鍵賦值給變量keyforvalueinfruit.values():#在for循環(huán)依次將值賦給變量value1.2.3字典與集合有時(shí)候需要將一系列字典存儲到列表中,或者將列表作為值存儲在字典中,或者在字典中嵌套字典,這稱為嵌套。下面演示在字典中嵌套字典。假設(shè)有一個(gè)字典users,里面設(shè)定兩個(gè)鍵,每個(gè)用戶對應(yīng)一個(gè)鍵,每個(gè)鍵對應(yīng)的值為一個(gè)字典,在字典中存儲年齡,性別和愛好。users={'Joe':{'age':'18','sex':'male','hobby':'tabletennis',},'Maria':{'age':'19','sex':'female','hobby':'piano',},}forname,user_moreinusers.items():print("\n"+"name:"+name)print("age:"+user_more['age'],"\t","hobby:"+user_more['hobby'])1.2.3字典與集合輸出結(jié)果如下:name:Joeage:18hobby:tabletennis

name:Mariaage:19hobby:piano1.2.3字典與集合集合(set)是Python的一個(gè)內(nèi)置類型,它是一個(gè)非常有用的數(shù)據(jù)結(jié)構(gòu)。它與列表的行為類似,唯一區(qū)別在于集合不會包含重復(fù)的值。下面演示集合的定義,以及添加和刪除元素。app1=set()#空集合必須使用set()方法定義app1.add('apple')#使用add()方法添加元素app1.add(2)print(app1)app2=set([1,2,3,4])app2.remove(2)#使用remove方法刪除元素print(app2)輸出結(jié)果如下:{2,'apple'}{1,3,4}1.2.3字典與集合Python中的集合可以看成數(shù)學(xué)意義上的無序和無重復(fù)元素的集合。并且Python自帶的集合類型支持很多數(shù)學(xué)意義上的集合操作。app1=set([1,3,4,6,7])app2=set([3,7,4,8,9])print("交集:",app1&app2,"\t","并集:",app1|app2)print("差集:",app2-app1)輸出結(jié)果如下:交集:{3,4,7}并集:{1,3,4,6,7,8,9}差集:{8,9}1.2.4程序流程控制所有的編程語言在編寫時(shí)都要遵照語言結(jié)構(gòu)和流程控制結(jié)構(gòu),它們控制整個(gè)程序的運(yùn)行步驟。流程控制包括順序控制,條件控制和循環(huán)控制。常用的流程控制語句有if-else語句、for循環(huán)語句、while循環(huán)語句、continue語句、break語句、pass語句等。if-else語句按照條件選擇執(zhí)行不同的代碼。if語句格式如下:if表達(dá)式:

語句1

語句2.....else:if表達(dá)式:....elif表達(dá)式:....elif表達(dá)式:....else:....或者1.2.4程序流程控制下面演示一個(gè)實(shí)例。x1=95ifx1<60:print("差")elifx1<80:print("良")elifx1<90:print("優(yōu)")else:print("極優(yōu)")極優(yōu)輸出結(jié)果如下:1.2.4程序流程控制循環(huán)結(jié)構(gòu)有while語句和for語句。它們格式如下:while表達(dá)式:#表達(dá)式結(jié)果為True時(shí),一直循環(huán)下去

語句1

語句2....

for變量in序列:#序列可以是列表,元組等可迭代對象

語句1#變量逐一遍歷序列里的所有元素,遍歷完退出循環(huán)體

語句2....1.2.4程序流程控制下面演示兩個(gè)實(shí)例。x=1whilex<5:print(x)x=x+2輸出結(jié)果如下:13x=[1,2,3]foryinx:y=y+1輸出結(jié)果如下:2341.2.4程序流程控制在Python中的pass語句是空語句,其作用是保持程序結(jié)構(gòu)的完整性。pass語句不做任何語句,一般用作占位語句。下面演示個(gè)實(shí)例。foriinrange(3):if1==2:passelse:print(i)輸出結(jié)果如下:012從輸出結(jié)果可以看出,pass語句并沒有執(zhí)行任何操作,只是保持了程序繼續(xù)執(zhí)行。1.2.4程序流程控制在Python中,縮進(jìn)至關(guān)重要,行首的空格決定邏輯行的縮進(jìn)層次,從而決定語句的分組,縮進(jìn)不正確,就會引起程序出錯(cuò)。根據(jù)前面幾種流程控制語句的學(xué)習(xí),我們知道在流程控制語句之后必有縮進(jìn)的語法塊,有時(shí)候可能并不需要執(zhí)行什么東西,然而空的語句并沒有提供縮進(jìn),這時(shí)就需要pass語句來占位,保持程序的完整運(yùn)行。前面的流程控制中,只要表達(dá)式的邏輯為真,循環(huán)就會一直運(yùn)行下去。有時(shí)候我們需要立即跳出循環(huán)體,這時(shí)候就需要用到break語句和continue語句。1.2.4程序流程控制在執(zhí)行break語句時(shí),會立即退出循環(huán)體,直接結(jié)束整個(gè)循環(huán)體。而continue語句并不會退出整個(gè)循環(huán)體,而是跳過當(dāng)前循環(huán)體去執(zhí)行之后的循環(huán)。下面演示實(shí)例。foriinrange(4):ifi>1:breakprint(i)輸出結(jié)果如下:011.2.5函數(shù)定義與調(diào)用在編程中會經(jīng)常執(zhí)行類似的操作,這些操作由同一段代碼完成。函數(shù)的出現(xiàn)把相對獨(dú)立的某些功能抽象出來,成為一個(gè)獨(dú)立的個(gè)體,調(diào)用函數(shù)可以幫助我們避免重復(fù)編寫這些代碼。函數(shù)定義時(shí),通常會包含一個(gè)或多個(gè)形參(函數(shù)的參數(shù)),調(diào)用函數(shù)時(shí)會傳入一個(gè)或多個(gè)實(shí)參(實(shí)際傳遞給函數(shù)的值)。下面是函數(shù)定義的基本語法格式:deffunction_name(arg1,arg2):functionbodyreturnvalue以上就是函數(shù)的基本定義,以“def”開頭,加上函數(shù)名。在后面的括號內(nèi)加入形參,可能一個(gè)或多個(gè),也可能沒有。之后根據(jù)需求書寫函數(shù)內(nèi)容,并在函數(shù)定義最后返回想要的值,也可以沒有返回值,根據(jù)需要定義。1.2.5函數(shù)定義與調(diào)用下面演示一個(gè)示例:defgreet(name,language):print("Hello,"+name)print("Welcometo"+language+"world!")greet("Joe","Python")此處定義函數(shù)greet(),函數(shù)實(shí)現(xiàn)打印兩條語句的功能。調(diào)用函數(shù)時(shí),提供兩個(gè)實(shí)參“Joe”和“Python”分別傳遞給兩個(gè)形參name和language。調(diào)用函數(shù)greet輸出為:Hello,JoeWelcometoPythonworld!1.3類與模塊Python是一種面向?qū)ο蟮木幊陶Z言,本小節(jié)將要介紹Python中的類和對象的相關(guān)概念與基本使用,同時(shí)引入模塊的概念,學(xué)習(xí)該如何導(dǎo)入、調(diào)用與創(chuàng)建模塊。1.3.1類與對象面向?qū)ο缶幊淌且环N程序設(shè)計(jì)范式,其中程序由多個(gè)對象組成。對象不僅可以定義復(fù)雜的數(shù)據(jù)結(jié)構(gòu),還可以包含復(fù)雜的算法和方法。對象將數(shù)據(jù)和方法封裝在一起,開發(fā)者只需處理對象內(nèi)部的數(shù)據(jù)和算法,并提供接口來調(diào)用這些功能。類必須在定義后才能使用,定義一個(gè)類也就是定義這一類對象的模板,定義它的屬性和方法。在Python中提供了class關(guān)鍵字來聲明一個(gè)類,類名首字母大寫。class中有成員屬性和方法。類的定義如下:class[類名]:def__init__(self,args1,args2):#定義成員屬性...def[方法名](self):#定義成員方法...1.3.1類與對象下面演示一個(gè)實(shí)例,創(chuàng)建一個(gè)描述人的類Person。Person類中定義兩個(gè)屬性name1和age1,構(gòu)造了兩個(gè)方法sleep()和study()。classPerson:def__init__(self,name,hobby):#定義屬性1=nameself.hobby1=hobbydefsleep(self):#定義方法print(1,"issleepingnow")defstudy(self):#定義方法print(1,"isfondof",self.hobby1)person1=Person('Michael','sports')#創(chuàng)建實(shí)例對象person1person1.sleep()#調(diào)用sleep()方法person1.study()#調(diào)用study()方法1.3.1類與對象在創(chuàng)建實(shí)例時(shí),有些屬性無須提供實(shí)參,并通過形參來定義,可在方法__init__中為其指定默認(rèn)值。例如上面的Person類,可默認(rèn)屬性eyes為‘two’,如下:classPerson:def__init__(self,name,hobby):1=nameself.hobby1=hobbyself.eyes='two'defsleep(self):print(1,"issleepingnow")defstudy(self):print(1,"isfondof",self.hobby1)defstruct(self):print("Thispersonhas",self.eyes,"eyes")person1=Person('Michael','sports')person1.struct()Thispersonhastwoeyes1.3.1類與對象在使用類來模擬現(xiàn)實(shí)世界的許多場景時(shí),通常需要修改實(shí)例的屬性,修改方法有兩種:一是通過實(shí)例進(jìn)行修改,二是在類的內(nèi)部定義函數(shù)進(jìn)行屬性修改。classPerson:def__init__(self,name,hobby):1=nameself.hobby1=hobby

defsleep(self):print(1,"issleepingnow")

defstudy(self):print(1,"isfondof",self.hobby1)

defmodify(self,hobby_):#定義修改hobby1屬性值的方法self.hobby1=hobby_print(1,"isfondof",self.hobby1)

#創(chuàng)建實(shí)例對象person1=Person('Michael','sports')

#通過方法輸出屬性值person1.study()#直接使用句點(diǎn)表示法修改屬性值person1.name1='John'#直接修改name1屬性值print(1,"isnowfondof",person1.hobby1)

#通過方法修改屬性值person1.modify('arts’)Print(person。name

MichaelisfondofsportsJohnisfondofarts輸出結(jié)果如下:1.3.2類的繼承與多態(tài)面向?qū)ο蟮木幊叹哂腥筇匦裕捶庋b性、繼承性和多態(tài)性。這些特性使得程序設(shè)計(jì)具有良好的擴(kuò)展性和健壯性。類與對象、函數(shù)等的創(chuàng)建,在一定程度上體現(xiàn)了Python語言的封裝特性,它將代碼封裝成一個(gè)個(gè)子模塊,不僅使得代碼邏輯清晰,而且提高了代碼的復(fù)用性。下面將介紹另外兩大特性,繼承與多態(tài)。1.3.2類的繼承與多態(tài)繼承是一種對類進(jìn)行分層級劃分的概念。繼承的基本思想是在一個(gè)類的基礎(chǔ)上制定出一個(gè)新的類,這個(gè)新的類不僅可以繼承原來類的屬性和方法,還可以增加新的屬性和方法。原來的類被成為父類,新的類被成為子類。在Python中,定義子類和定義普通類的方法相同,只是需要在子類的括號里增加需要繼承的父類的名字。定義形式如下:classBaseClass1:#定義父類def__init__(self,args1,args2):[語法塊]deffunction__1(self):[語法塊]...classSubClass(BaseClass1):#定義子類,在括號內(nèi)表明繼承的父類名稱def__init__(self,srgs1,args2):super().__init__(args1,args2)#使用super()調(diào)用父類__init__()[語法塊]#可以定義子類特有屬性deffunction_2(self):#可以可定義子類特有方法[語法塊]...1.3.2類的繼承與多態(tài)下面演示一個(gè)實(shí)例。classPerson:def__init__(self,name,food):1=nameself.food1=fooddeflife(self):print(1,"isfondof",self.food1)classMyperson(Person):def__init__(self,name,food,fruit__):super().__init__(name,food)#使用super()調(diào)用父類__init__()方法self.fruits=fruit__#定義子類特有的屬性self.diets={}defdiet(self,diet__):#定義子類特有的方法。self.diets=diet__print("Hisaffectionsfor",self.food1+":")print("\t"+"fruits:",end="")forfruits1inself.fruits:print(fruits1,end="")print('\n\t'+"others:",self.diets)user1=Myperson('Michael','Chinesefoods',['orange','apple','mango'])#子類實(shí)例user1.life()#子類實(shí)例調(diào)用父類方法diets__table={'vegetables':'tomato','beanprducts':'tofu','meat':'pork'}user1.diet(diets__table)#子類實(shí)例調(diào)用子類方法輸出如下:MichaelisfondofCinesefoodsHisaffectionsforCinesefoods:fruits:orangeapplemangoothers:{'vegetables':'tomato','beanprducts':'tofu','meat':'pork'}1.3.2類的繼承與多態(tài)類的多態(tài)繼承的思想可以幫助我們重復(fù)使用代碼,但有時(shí)候子類的行為會和父類有所不同。當(dāng)子類和父類有相同的方法時(shí),子類的方法會覆蓋父類的方法,這樣的代碼在運(yùn)行時(shí)總會調(diào)用子類的方法,這就是多態(tài)。多態(tài)會根據(jù)類的不同表現(xiàn)出不同的行為。下面演示一個(gè)示例。1.3.2類的繼承與多態(tài)輸出結(jié)果如下#定義基類FruitclassFruit:defkind(self):print("fruit")#定義繼承自Fruit的子類OrangeclassOrange(Fruit):defkind(self):print("orange")

#定義繼承自O(shè)range的子類AppleclassApple(Orange):defkind(self):print("apple")#創(chuàng)建Fruit類的實(shí)例type_1=Fruit()type_1.kind()#輸出:fruit,多態(tài)表現(xiàn)為調(diào)用Fruit類的kind方法

#創(chuàng)建Orange類的實(shí)例type_2=Orange()type_2.kind()#輸出:orange,多態(tài)表現(xiàn)為調(diào)用Orange類的kind方法

#創(chuàng)建Apple類的實(shí)例type_3=Apple()type_3.kind()#輸出:apple,多態(tài)表現(xiàn)為調(diào)用Apple類的kind方法Fruitorangeapple由輸出結(jié)果可知,當(dāng)子類和父類方法一樣時(shí),子類會覆蓋父類的方法,表現(xiàn)出與父類不同的行為。1.3.3模塊模塊就是一個(gè)包含Python定義和聲明的“.py”文件,里面包含一些定義的變量和函數(shù)。Python解釋器通過模塊來組織代碼,通過“包”來加以組織模塊,而“包”包含模塊且至少包含一個(gè)__init__.py的文件。簡單來說,包就是文件夾,且該文件夾下必須有__init__.py文件,該文件的內(nèi)容可以為空。__init__.py用于標(biāo)識當(dāng)前文件夾是一個(gè)包。下面給出如何從一個(gè)包文件里面加載模塊,以及模塊中的類和函數(shù)。1.3.3模塊#從包里加載模塊frompackageNameimportmoduleName

#給加載的模塊取別名為aliasNamefrompackageNameimportmoduleNameasaliasName

#從模塊里加載類frommoduleNameimportclassName

#給加載的類取別名為aliasClassNamefrommoduleNameimportclassNameasaliasClassName

#從模塊里加載函數(shù)frommoduleNameimportfunctionName

#給加載的函數(shù)取別名為aliasFunctionNamefrommoduleNameimportfunctionNameasaliasFunctionName

#從包里直接加載類frompackageName.moduleNameimportclassName

#從包里直接加載函數(shù)frompackageName.moduleNameimportfunctionName

#直接加載包importpackageName1.3.3模塊調(diào)用其中的類或函數(shù)使用句點(diǎn)法。加載方式不同,那么調(diào)用其中的類和函數(shù)的方式也會不同。如果直接加載到類或函數(shù),則直接調(diào)用。無須帶有包名或者模塊名。如果加載到模塊,調(diào)用其中的類或函數(shù),則要帶有模塊名。示例代碼如下:frompackageNameimportmoduleNamemoduleName.funtionName()#調(diào)用模塊中的函數(shù)classfact=moduleName.className(args1,args2)#調(diào)用模塊中的類如果直接加載包,則要寫成:importpackNamepackageName.moduleName.funtionName()#調(diào)用模塊中的函數(shù)classfact=packageName.moduleName.className(args1,args2)#調(diào)用模塊中的類1.3.3模塊下面自建一個(gè)簡單的包文件,里面含有一個(gè)__init__.py文件和一個(gè)food.py文件。其中__init__.py可以什么內(nèi)容都不填寫,只是單純證明這是一個(gè)可被加載調(diào)用的包。在food.py文件中編寫一個(gè)模塊,模塊中含有一個(gè)類Fruit和一個(gè)函數(shù)inp()。文件夾內(nèi)容如下:工作文件夾never_give_up:|-------包文件夾my__Package|---------__init__.py|---------food.py|-------main_.py文件下面開始在main_.py文件中加載food模塊,調(diào)用其中的類和函數(shù)。Food模塊如下:classFruit():#定義類def__init__(self,name):=namedefdecison(self,fruit11):self.fruitw=fruit11forfruitsinself.fruitw:iffruits=='orange':print("Youlivelifetothefullest!")else:pass

definp():#定義函數(shù)fruit2=[]foriinrange(0,4):xy=input()fruit2.append(xy)returnfruit21.3.3模塊main_.py文件如下:frommy_Packageimportfoodastt#加載包中的food模塊fruit11=tt.inp()#調(diào)用模塊food中的函數(shù)inp()fruit_=tt.Fruit('Michael')#調(diào)用模塊food中的類Fruitfruit_.decison(fruit11)#調(diào)用類中的函數(shù)decison()依次輸入如下內(nèi)容:Applemangoorangestrawberry輸出結(jié)果如下:Youlivelifetothefullest!1.3.3模塊除了自己定義的模塊和包之外,Python官方還提供了許多內(nèi)置的包和模塊,這些被稱為標(biāo)準(zhǔn)庫。標(biāo)準(zhǔn)庫是隨Python解釋器一同安裝的,包含了許多功能強(qiáng)大的模塊,幫助開發(fā)者完成各種常見的編程任務(wù)。例如,常用的標(biāo)準(zhǔn)庫模塊包括sys模塊(用于訪問Python解釋器的參數(shù)和功能)、os模塊(用于與操作系統(tǒng)進(jìn)行交互)和math模塊(提供數(shù)學(xué)計(jì)算功能)等。sys模塊用來查看操作系統(tǒng)的信息,語法格式如下:importsysprint(sys.platform)1.3.3模塊os模塊獲取當(dāng)前文件所在目錄,語法格式如下:importosprint(os.path.dirname(__file__))os獲取當(dāng)前當(dāng)前路徑以及切換當(dāng)前路徑,語法格式如下:importosprint(os.getcwd())os.chdir("c:\\")#切到C盤根目錄print(os.getcwd())math模塊提供了兩個(gè)常量以及一些復(fù)雜的數(shù)學(xué)計(jì)算函數(shù)示例代碼如下:importmathprint(math.pi)#圓周率piprint(math.e)#自然常數(shù)e輸出如下:3.1415926535897932.7182818284590451.4圖像界面設(shè)計(jì)圖形用戶界面概述圖形用戶界面(GraphicalUserInterface)是采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。它是一種一種人與計(jì)算機(jī)通信的界面顯示格式,允許用戶使用鼠標(biāo)等輸入設(shè)備操縱屏幕上的圖形或菜單選項(xiàng),以選擇命令,調(diào)用文件,啟動(dòng)程序或執(zhí)行一些其它的日常任務(wù)。與通過輸入字符命令的字符界面相比,圖像用戶界面擁有許多優(yōu)點(diǎn)和方便之處。圖形用戶界面由窗口,下拉菜單,對話框以及相應(yīng)的控制部件等組成,在圖形用戶界面中,用戶看到的和操作的都是圖形對象。在Python開發(fā)GUI程序時(shí),有許多GUI庫可用,比如Tkinter、wxPython、PyQT、PySide等。像wxPython、PyQT等適合大型的GUI程序編寫,Tkinter比較適合輕量級的GUI程序。Tkinter庫是Python語言的內(nèi)置GUI庫,使用時(shí)直接導(dǎo)入即可,對于初學(xué)者比較方便。Tkinter是Python語言標(biāo)準(zhǔn)GUI工具包的接口,用于開發(fā)跨平臺的GUI應(yīng)用程序。它通過內(nèi)部嵌入的Tcl解釋器,將Python調(diào)用轉(zhuǎn)化為Tcl命令,從而實(shí)現(xiàn)了快速創(chuàng)建GUI界面應(yīng)用程序的功能。Tkinter本質(zhì)上是Python封裝的Tcl代碼,通過Tcl解釋器來執(zhí)行,以支持GUI界面的創(chuàng)建和操作。1.4.2窗體容器和組件基于Tkinter模塊創(chuàng)建GUI程序包含以下四個(gè)核心步驟。(1)創(chuàng)建應(yīng)用程序主窗口對象fromtkinterimport*Root=Tk()(2)在主窗口中,添加可視化組件,如按鈕(Button)、文本框(Label)等。bt01=Button(root)bt01["text"]=

"Helloworld"(3)通過幾何布局管理器,管理組件大小和位置bt01.pack()(4) 事件處理。通過綁定事件處理程序,相應(yīng)用戶操作所觸發(fā)的事件。defsay_hello(e):Messagebox.showinfo("Message","HelloUsers!")print("Helloworld")bt01.bind("<Button-1>",say_hello)1.4.2窗體容器和組件圖形用戶界面是一個(gè)個(gè)組件組成的,就像小孩搭建積木一樣最終組成了整個(gè)界面,有的組件還能在里面放置其他組件,這樣稱之為容器。Tkinter的GUI組件繼承關(guān)系圖如圖所示。從關(guān)系圖可以看出,Object是所有類的根基類。在Object下包含有五種基類:Misc、Pack、Place、Grid、Wm。Misc它提供了可視化組件的基礎(chǔ)功能,例如配置選項(xiàng)和方法,Wm主要提供了一些與窗口管理器通信有關(guān)的功能函數(shù),Place、Pack、Grid則為布局管理器,管理組件大小、位置等。1.4.2窗體容器和組件在Misc中有一個(gè)重要的類是Widget,它包含了Tkinter模塊所有的可視化組件。如圖1-10是常見的Widget的可視化組件。通過Widget組件可以實(shí)現(xiàn)多種用戶交互和界面設(shè)計(jì)需求,包括創(chuàng)建窗口、顯示文本、處理用戶輸入、繪制圖形、組織布局等。了解這些組件及其用途,有助于你選擇合適的工具來構(gòu)建應(yīng)用程序的界面,并實(shí)現(xiàn)用戶所需的功能。1.4.2窗體容器和組件在Tkinter中,可以使用geometry("wxh±x±y")方法來設(shè)置主窗口的位置和大小。這里的w代表窗口的寬度,h代表窗口的高度。+x表示窗口距離屏幕左邊的距離,-x表示距離屏幕右邊的距離,+y表示距離屏幕上邊的距離,-y表示距離屏幕下邊的距離。下面的代碼為創(chuàng)建一個(gè)根窗口并設(shè)置其標(biāo)題和尺寸的示例代碼。fromtkinterimport*root=Tk()#調(diào)用Tk類,創(chuàng)建根窗口root.title("第一個(gè)GUI程序")#添加標(biāo)題root.geometry("500x300+400+150")#定義窗口大小root.mainloop()#顯示1.4.2窗體容器和組件下面的實(shí)例演示了為窗口添加組件,并為組件綁定事件的方法。fromtkinterimport*fromtkinterimportmessageboxdefsay_hello(e):messagebox.showinfo("Message","HelloUsers!")root=Tk()#調(diào)用Tk類,創(chuàng)建根窗口root.title("第一個(gè)GUI程序")#添加標(biāo)題root.geometry("500x300+400+150")#定義窗口大小btn01=Button(root)#創(chuàng)建組件按鈕btn01["text"]="click"btn01.pack()#調(diào)用布局管理器btn01.bind("<Button-1>",say_hello)#綁定事件root.mainloop()單擊click按鈕,結(jié)果如下:1.4.2窗體容器和組件下面使用面向?qū)ο蟮姆绞綄懸粋€(gè)簡單的GUI程序。fromtkinterimport*fromtkinterimportmessageboxclassApplication(Frame):def__init__(self,master):super().__init__(master)self.master=masterself.creatwidgets1()self.pack()defcreatwidgets1(self):globalphotophoto=PhotoImage(file='sea_1.gif')self.label01=Label(self,image=photo)self.label01.pack()self.label02=Label(self,text="beautifulsea\n美麗的海景",fg="blue",bg="yellow",width=20,height=2,font=("微軟雅黑",18),justify=CENTER)self.label02.pack()self.btn=Button(self,text="click",fg="

white",bg="green",font=("微軟雅黑",14),width=8,height=2,command=self.write__)self.btn.pack()defwrite__(self):messagebox.showinfo("write","HelloSea!")root=Tk()root.geometry("500x350+400+150")root.title("HelloSea")root.resizable(width=False,height=False)app=Application(root)root.mainloop()輸出結(jié)果如圖1-13所示1.4.3界面布局管理一個(gè)GUI應(yīng)用程序必然有大量的組件,這時(shí)候就需要使用布局管理器來組織管理父組件中的子組件的布局方式。Tkinter提供了三種布局管理器:pack、grid、place。grid是表格布局管理器,采用表格結(jié)構(gòu)組織組件,子組件的位置由行和列的單元格來確定,并且可以跨行和跨列,從而實(shí)現(xiàn)復(fù)雜的布局。下面演示一個(gè)實(shí)例。fromtkinterimport*classApplicaition(Frame):def__init__(self,master):super().__init__(master)self.master=master;self.pack()self.creatwidget()defcreatwidget(self):self.label1=Label(self,text="用戶名")self.label1.grid(row=1,column=0)self.entry1=Entry(self)self.entry1.grid(row=1,column=1)Label(self,text="Wechat登錄orQQ登錄").grid(row=1,column=2)Label(self,text="密碼").grid(row=2,column=0)Entry(self,show="*").grid(row=2,column=1)btn01=Button(self,text="登錄")btn01.grid(row=3,column=1,sticky=EW)Button(self,text="取消").grid(row=3,column=2)globalphoto;photo=PhotoImage(file='sea_1.gif')self.label2=Label(self,image=photo)self.label2.grid(row=0,column=0,columnspan=3,sticky=EW)

root=Tk()root.geometry("600x400+320+160")root.title("登錄界面")app=Applicaition(root)root.mainloop()1.4.3界面布局管理pack布局是在之前的實(shí)例中使用過,它是按照組件的創(chuàng)建順序?qū)⒆咏M件添加到父組件中,按照垂直或者水平的方向自然排布。如果不指定任何選項(xiàng),默認(rèn)在父組件中自頂向下垂直添加組件。pack是代碼最少,最簡單的一種布局方式,可以用于快速生成界面。下面演示一個(gè)簡單的實(shí)例。fromtkinterimport*root=Tk()root.geometry("500x300")Button(root,text="A",bg="green",fg="white").pack(expand="no",side="top",fill="x",padx=20,pady=30)Button(root,text="B",bg="red",fg="white").pack(side="bottom",fill="x",padx=20,pady=30)Button(root,text="C",bg="purple",fg="white").pack(side="left",fill="y",padx=10,pady=10)Button(root,text="D",bg="cyan",fg="black").pack(side="right",fill="y",padx=10,pady=10)Button(root,text="E",bg="blue",fg="white").pack(expand="yes",fill="both")root.mainloop()1.4.4文本框及其他組件Entry組件是Tkinter庫中的一個(gè)用于接收單行文本輸入的控件。它是創(chuàng)建簡單文本輸入框的基礎(chǔ)組件。用戶可以在Entry組件中輸入、編輯和刪除文本。如果用戶輸入的文字長度大于Entry控件的寬度時(shí),文字會自動(dòng)向后滾動(dòng)。組件名稱功能描述width設(shè)置文本框的寬度,寬度值每加1則加一個(gè)字節(jié)insert文本框插入數(shù)據(jù),可以指定插入數(shù)據(jù)的位置delete刪除文本框中的數(shù)據(jù),可以通過數(shù)據(jù)位置,指定刪除的數(shù)據(jù)get獲取文本框中的數(shù)據(jù),可以通過數(shù)據(jù)位置,指定獲取的數(shù)據(jù)relief文本框樣式,設(shè)置控件顯示效果,可選的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。bd設(shè)置文本框的邊框大小,值越大邊框越寬bg設(shè)置文本框默認(rèn)背景色fg設(shè)置文本框默認(rèn)前景色,即字體顏色font文本字體,文字字號,文字字形。字形有overstrike/italic/bold/underlinestate文本框狀態(tài)選項(xiàng),狀態(tài)有DISABLED/NORMAL,DISABLED狀態(tài)文本框無法輸入,NORMAL狀態(tài)可以正常輸入highlightcolor設(shè)置文本框點(diǎn)擊后的邊框顏色highlightthickness設(shè)置文本框點(diǎn)擊后的邊框大小selectbackground選中文字的背景顏色selectboderwidth選中文字的背景邊框?qū)抯electforeground選中文字的顏色show指定文本框內(nèi)容顯示的字符第2章Python圖像處理基礎(chǔ)2.1圖像處理類PIL2.2繪圖類Matplotlib2.3科學(xué)計(jì)算類庫NumPy2.4數(shù)值運(yùn)算類庫SciPy2.1圖像處理類PIL在Python2中,PIL(PythonImagingLibrary)是一個(gè)非常好用的圖像處理庫,但PIL不支持Python3。因此開發(fā)者在Python3中提供了Pillow庫,它是PIL庫的1.1.7版本的一個(gè)分岔,在使用時(shí)需要導(dǎo)入PIL,而不是導(dǎo)入Pillow。在Pillow庫中,除了有很多模塊,還有許多插件。其中最常用也最為基礎(chǔ)的是Image模塊中同名的Image類,其他很多模塊都是在Image模塊的基礎(chǔ)之上對圖像進(jìn)行進(jìn)一步的處理。表2-1列出了Image類的一些常用屬性。2.1.1圖像打開與模式轉(zhuǎn)換常用屬性描述mode圖像模式,如RGB表示真彩圖像,L表示灰度圖像等width圖像的像素寬度height圖像的像素高度format圖像的格式,如JPG,PNG,BMP,GIF等size圖像的大小,由寬度和高度組成的一個(gè)元組readonly表示圖像是否為只讀info表示圖像信息,是一個(gè)包含圖像信息的字典category表示圖像的類別表2-1Image類常用屬性2.1.1圖像打開與模式轉(zhuǎn)換首先使用open()方法打開圖像,并且獲取圖像的一些屬性。表2-1列出使用Image類的一些常用屬性。下面演示一個(gè)實(shí)例。fromPILimportImageimg=Image.open("pictures\\cvb.png");img.show()print(img.width,img.height,img.size)print(img.mode,img.format,img.readonly,img._category);print()輸出如下:19201080(1920,1080)RGBPNG00{'dpi':(96.012,96.012)}2.1.1圖像打開與模式轉(zhuǎn)換上述代碼引入了Image模塊,并以open()方法打開了“cvb.png”這個(gè)圖像,構(gòu)建了名為img的實(shí)例。如果打開失敗,則會拋出IOError異常。圖2-1使用open()方法打開的圖像2.1.1圖像打開與模式轉(zhuǎn)換圖像模式是在數(shù)字圖像處理和計(jì)算機(jī)圖形領(lǐng)域中廣泛使用的一種重要概念。這些模式定義了圖像如何編碼和表示,決定了圖像中可用的顏色和信息量。每種模式都有其特定的應(yīng)用領(lǐng)域和優(yōu)勢,根據(jù)需要選擇合適的模式可以有效地處理和呈現(xiàn)圖像。表2-2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論