版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章機器視覺編程基礎(chǔ)3.1Python安裝及環(huán)境搭建 3.1.1安裝Python 3.1.2安裝PyCharmCommunity 3.1.3PyCharm初始化
3.1.4在Prompt中安裝OpenCV庫函數(shù)3.2Python編譯器3.3Python數(shù)據(jù)類型 3.3.1數(shù)值類型 3.3.2字符串類型 3.3.3布爾類型3.4變量與常量第3章機器視覺編程基礎(chǔ)3.5運算符 3.5.1運算符簡介 3.5.2字符串類型3.6選擇與循環(huán) 3.6.1if語句 3.6.2while循環(huán) 3.6.3for循環(huán) 3.6.4break和continue語句3.7列表與元組 3.7.1序列索引 3.7.2序列切片
第3章機器視覺編程基礎(chǔ) 3.7.3創(chuàng)建 3.7.4查詢 3.7.5修改 3.7.6刪除3.8Numpy數(shù)組 3.8.1Numpy.array 3.8.2創(chuàng)建Numpy數(shù)組 3.8.3Numpy數(shù)組切片3.9字典 3.9.1字典的創(chuàng)建 3.9.2字典的常規(guī)操作
第3章機器視覺編程基礎(chǔ) 3.9.3字典的遍歷3.10函數(shù) 3.10.1函數(shù)的定義與調(diào)用 3.10.2參數(shù)傳遞3.11面向?qū)ο蟮木幊?3.11.1類與對象
3.11.2繼承與多態(tài)3.12Python調(diào)用MATLAB程序
3.1Pyhton安裝及環(huán)境搭建Anaconda官網(wǎng)
/products/individualPyCharm官網(wǎng)
/pycharm/download/#section=windowsPyCharm初始化
創(chuàng)建一個新的工程在Interpreter目錄中選擇CondaEnvironment,在Interpreter右側(cè)目錄中選擇Python.exe,此文件Python.exe在已安裝好的Anaconda目錄下,點擊OK完成配置安裝OpenCV庫
選擇Anaconda3下的AnacondaPrompt,在窗口中輸入pipinstall-i/simpleopencv-python==53.2Pyhton編譯器Python是一種跨平臺的計算機程序語言是我們進(jìn)行項目開發(fā)而使用的一門計算機語言,通俗來說就是編寫代碼,編寫完代碼之后,我們就需要運行,這時我們需要運行Python代碼的運行環(huán)境和工具Anaconda是一個開源的Python發(fā)行版本,其包含了conda、Python等180多個科學(xué)包及其依賴項,Conda是一個開源的包、環(huán)境管理器,可以用于在同一個機器上安裝不同版本的軟件包及其依賴,并能夠在不同的環(huán)境之間切換PyCharm是一種常用的PythonIDE,該IDE提供了一些高級功能,以用于支持Django框架下的專業(yè)Web開發(fā),界面編寫代碼和運行操作更加簡單3.2Pyhton編譯器我們使用以下四種方式來運行Python代碼,前提是已經(jīng)下載好了Python解釋器,下載后配置好其系統(tǒng)環(huán)境變量,解釋器的作用就是將Python代碼解釋成機器可以識別并執(zhí)行的語言1.在命令窗口中運行快捷鍵Win+R—>輸入cmd到命令窗口—>窗口內(nèi)輸入python3.2Pyhton編譯器2.腳本方式運行新建一個A.txt腳本文件,寫完腳本之后,然后把名稱后綴命名為.py,到命令窗口找到相應(yīng)的文件目錄,然后執(zhí)行代碼pythonA.py3.2Pyhton編譯器3.使用Python自帶的IDLE編輯器IDLE是Python原生自帶的開發(fā)環(huán)境,是迷你版的IDE,與以上方式不同的是它帶有圖形界面,有簡單的編輯和調(diào)試功能,但是操作起來比較麻煩。使用方式Win+R—>輸入IDLE3.2Pyhton編譯器4.使用第三方Python的IDE編輯器使用第三方Python的IDE相對于Python自帶的IDLE而言,功能更加全面,界面更加美觀,操作起來更加容易。目前比較流行的有PyCharm、Vscode、Jupyter等,本文推薦廣泛使用的Pycharm3.3.1數(shù)值類型數(shù)值類型一般用來存儲程序中的數(shù)值。Python支持三種不同的數(shù)值類型,分別是整型(int)、浮點型(float)和復(fù)數(shù)型(complex)1.整型整型就是我們常說的整數(shù),沒有小數(shù)點,但是可以有正負(fù)號。在Python中,可以對整型數(shù)據(jù)進(jìn)行(+)、減(-)、乘(*)、除(/)和乘方(**)的操作另外,Python中還支持運算次序,可以在同一個表達(dá)式中使用多種運算,還可以使用括號來修改運算次序3.3.1數(shù)值類型2.浮點型Python將帶小數(shù)點的數(shù)字都稱為浮點數(shù)。大多數(shù)編程語言都使用這個術(shù)語,它可以用來表示一個實數(shù),通常分為十進(jìn)制小數(shù)形式(如5.32)和指數(shù)形式.指數(shù)形式的浮點數(shù)用字母e或者(E)來表示以10為底的小數(shù),e之前為整數(shù)部分,之后為指數(shù)部分,而且兩部分必須同時存在3.復(fù)數(shù)型在科學(xué)計算中經(jīng)常會遇到復(fù)數(shù)型的數(shù)據(jù),鑒于此,Python提供了運算方便的復(fù)數(shù)類型。對于復(fù)數(shù)類型的數(shù)據(jù),一般的形式是a+bj,其中a為實部,b為虛部,j為虛數(shù)單位
3.3.2字符串類型在Python中可以使用單引號、雙引號、三引號來定義字符串,使用單引號或者雙引號表示的字符串必須在同一行表示,而三引號表示的字符串可以多行表示,這種情況用于注釋:>>>str3="""helloPtyhon!""">>>print(str3)HelloPython!在Python中不可以對已經(jīng)定義的字符串進(jìn)行修改,只能重新定義字符串運行結(jié)果3.3.3布爾類型
布爾(bool)類型的數(shù)據(jù)用于描述邏輯運算的結(jié)果,只有真(True)和假(False)兩種值,在Python中一般用在程序中表示條件,滿足為True,不滿足為False3.4變量與常量計算機中的變量類似于一個存儲東西的盒子,在定義一個變量后,可以將程序中表達(dá)式所計算的值放入該盒子中,即將其保存到一個變量中。在程序運行過程中不能改變的數(shù)據(jù)對象稱為常量在Python中使用變量要遵循一定的規(guī)則,基本規(guī)則如下:(1)變量名只包含字母、數(shù)字和下劃線。變量名可以以字母或下劃線開頭,但不能以數(shù)字開頭。例如,可將變量命名為singal_2,但不能將其命名為2_singal。(2)變量名不包含空格,但可使用下劃線來分隔其中的單詞。例如,變量名open_cl可行,但變量名opencl會引發(fā)錯誤。(3)變量名應(yīng)既簡短又具有描述性。(4)不要將Python關(guān)鍵字和函數(shù)名用作變量名。例如,break、i、for等關(guān)鍵字不能用作變量名3.5.1運算符簡介
Python中,如正負(fù)號運算符“+”和“-”接受一個操作數(shù)、可以將其稱為一元運算符。而接受兩個操作數(shù)的運算符可以稱為二元運算符,如“*”“/”等。如果在計算過程中包含多個運算符,其計算的順序需要根據(jù)運算符的結(jié)合順序和優(yōu)先級而定。優(yōu)先級高的先運算,同級的按照結(jié)合順序從左到右依次計算3.5.2運算符優(yōu)先級按優(yōu)先順序排列:運算符描述Or布爾“或”And布爾“與”Not布爾“非”in,notin成員測試is,isnot同一性測試<,<=,>,>=,!=,==比較|按位或^按位異或&按位與<<,>>移位+,-加法與減法*,/,%,//乘法,除法,取余,整數(shù)除法~x按位反轉(zhuǎn)**指數(shù)/冪3.6選擇與循環(huán)選擇結(jié)構(gòu)(根據(jù)程序執(zhí)行路線不同)循環(huán)結(jié)構(gòu)也是類似,需要有循環(huán)的條件和循環(huán)所執(zhí)行的程序(即循環(huán)體)單分支雙分支多分支3.6.1if語句
if語句的子句即if語句在條件成立時所要執(zhí)行的程序,它將在語句的條件為True時執(zhí)行。如果條件為False,那么將跳過子句。if單分支結(jié)構(gòu)一般的格式為:if表達(dá)式(條件):語句塊(子句)單分支if語句執(zhí)行過程3.6.1if語句if雙分支結(jié)構(gòu)if子句后有時也可以跟else語句。只有if語句的條件為False時,else子句才會執(zhí)行if語句同樣可以實現(xiàn)雙分支結(jié)構(gòu),其一般格式為:
if表達(dá)式(條件):語句塊1(1f子句)else;語句塊2(else子句)單分支if語句執(zhí)行過程3.6.1if語句if多分支結(jié)構(gòu)雖然只有if或else子句會被執(zhí)行,但當(dāng)希望有更多可能的子句中有一個被執(zhí)行時,elif語句就派上用場了。elif語句是“否則如果”,總是跟在if或另一條elif語句后面。它提供了另一個條件,僅在前面的條件為False時才檢查該條件。3.6.1if語句
if語句也可以實現(xiàn)多分支結(jié)構(gòu),它的一般格式為:if表達(dá)式1(條件1):語句塊1elif表達(dá)式2(條件2):語句塊2elif表達(dá)式3(條件3):語句塊3……elif表達(dá)式m(條件m):語句塊m[else:語句塊n]多分支if語句執(zhí)行過程3.6.2while循環(huán)
while循環(huán)結(jié)構(gòu)是通過判斷循環(huán)條件是否成立來決定是否要繼續(xù)進(jìn)行循環(huán)的一種循環(huán)結(jié)構(gòu),它可以先判斷循環(huán)的條件是否為True,若為True則繼續(xù)進(jìn)行循環(huán),若為False,則退出循環(huán)。while語句基本格式在Python中,while語句的一般格式為:while表達(dá)式(循環(huán)條件):語句塊 while循環(huán)語句執(zhí)行過程3.6.2while循環(huán)while語句中的else語句在Python中可以在while語句之后使用else語句。在while。運向的循環(huán)體正常循環(huán)結(jié)束退出循環(huán)后會執(zhí)行else語句的子句,但是當(dāng)循環(huán)用break語句退出時,else語句的子句則不會被執(zhí)行。3.6.3for循環(huán)當(dāng)想要在程序中實現(xiàn)計數(shù)循環(huán)時,一般會采用for循環(huán)。在Python中,for循環(huán)是一個通用的序列迭代器,可以遍歷任何有序序列對象中的元素。for循環(huán)的格式for循環(huán)的一般格式為:for目標(biāo)變量in序列對象:語句塊for循環(huán)首先將序列中的元素依次賦給目標(biāo)變量,每賦值一次都要執(zhí)行一次循環(huán)體的代碼。for循環(huán)執(zhí)行結(jié)構(gòu)3.6.3for循環(huán)range在for循環(huán)中的應(yīng)用for循環(huán)經(jīng)常和range聯(lián)用。range是Python3.x內(nèi)部定義的一個迭代器對象,可以幫助for語句定義迭代對象的范圍。其基本格式為:range(start,stopl,[step])range的返回值從start開始,以step為步長,到stop結(jié)束,step為可選參數(shù),默認(rèn)為1。3.6.4break和continue語句break語句和continue語句都是循環(huán)控制語句,可以改變循環(huán)的執(zhí)行路徑。break語句break語句多用于for、while循環(huán)的循環(huán)體,作用是提前結(jié)束循環(huán),即跳出循環(huán)體。當(dāng)多個循環(huán)嵌套時,break只是跳出最近的一層循環(huán)。continue語句continue語句類似于break語句,必須在for和while循環(huán)中使用。但是,與break語句不同的是,continue語句僅僅跳出本次循環(huán),返回到循環(huán)條件判斷處,并且根據(jù)判斷條件來確定是否繼續(xù)執(zhí)行循環(huán)。3.7列表和元組在數(shù)學(xué)里,序列也稱為數(shù)列,是指按照一定順序排列的一列數(shù),在程序設(shè)計中,序列是一種常用的數(shù)據(jù)存儲方式Python中內(nèi)置了5個常用的序列結(jié)構(gòu),分別是列表、元組、集合、字典和字符串在Python中,列表和元組這兩種序列可以存儲不同類型的元素。不同之處:列表的值是可以改變的,而元組的值是不可變的。3.7.1序列索引序列結(jié)構(gòu)遵循序列索引。序列中的每一個元素都有一個編號,稱為索引。正數(shù)索引:從左往右計數(shù),第一個索引值是0負(fù)數(shù)索引:從右向左計數(shù),最后一個元素的索引值是-13.7.2序列切片切片操作是訪問序列中元素的另一種方法,它可以訪問一定范圍內(nèi)的元素。通過切片操作可以生成一個新的序列。實現(xiàn)切片操作的語法格式如下:qiepian[start:end:step]參數(shù)說明:
qiepian:表示序列的名稱;
start:表示切片的開始位置(包括該位置),如果不指定,則默認(rèn)為0;
end:表示切片的截止位置(不包括該位置),如果不指定,則默認(rèn)為序列的長度;
step:表示切片的步長,如果省略,則默認(rèn)為1,當(dāng)省略該步長時,最后一個冒號也可以省略。3.7.3創(chuàng)建列表的創(chuàng)建方法一:列表的創(chuàng)建采用在方括號中用逗號分隔的定義方式,基本形式如下:
方法二:列表也可以通過list對象來創(chuàng)建,基本形式如下:list()#創(chuàng)建一個空列表list(iterable)#創(chuàng)建一個空列表,iterable為列舉對象元素3.7.3創(chuàng)建元組的創(chuàng)建采用括號中逗號分隔的定義方式,其中,圓括號可以省略。基本形式如下:
或者為:注意當(dāng)元組中只有一個項目時,其后面的逗號可以省略,否則,Python解釋器會把(x1)當(dāng)做x1元組也可以通過tuple對象來創(chuàng)建,基本形式如下:tuple()#創(chuàng)建一個空元組tuple(iterable)#創(chuàng)建一個空元組,iterable為列舉對象元素3.7.4查詢列表和元組都支持查詢(訪問)其中的元素。在Python中,序列的每一個元素被分配一個位置編號,稱為索引(index)。第一個元素的索引是0,序列中的元素都可以通過索引進(jìn)行訪問。一般格式為:
序列名[索引]列表與元組的正向索引查詢:list_1=[1,2,3]print(list_1[1])tuple_1=((1,2,3))print(tuple_1[0])運行結(jié)果為:3.7.4查詢另外,Python序列還支持反向索引(負(fù)數(shù)索引)。這種索引方式可以從最后一個元素開始計數(shù),即倒數(shù)第一個元素的索引是-1。這種方法可以在不知道序列長度的情況下訪問序列最后面的元素。列表與元組的反向索引查詢:list_1=[1,2,3]print(list_1[-1])tuple_1=((1,2,3))print(tuple_1[-2])運行結(jié)果為:運行結(jié)果為:3.7.5修改對于修改操作,由于元組的不可變性,元組的數(shù)據(jù)不可以被改變,除非將其改為列表類型。對于列表來說,要修改其中某一個值,可以采用索引的方式,這種操作也叫作賦值。
例如: list_1=[1,2,3] list_1[1]=9 print(list_1)
運行結(jié)果為:3.7.5修改append函數(shù)的作用是在列表末尾添加一個元素extend函數(shù)用于將一個列表添加到另一個列表的尾部由于元組的不可變性,我們不能改變元組的元素,但是可以將元組轉(zhuǎn)換為列表進(jìn)行修改,例如:tuple_1=[1,2,3]list_1=list(tuple_1)#元祖轉(zhuǎn)列表list_1[1]=8tuple_1=tuple(list_1)#列表轉(zhuǎn)元祖print(tuple_1)運行結(jié)果為:3.7.5修改方法解釋說明s.append(x)把對象x追加到列表s的尾部s.clear()刪除所有元素s.copy()復(fù)制列表s.extend(t)把序列t附加到列表s的尾部s.insert(i,x)在下標(biāo)i的位置插入對象xs.pop([i])返回并移除下標(biāo)i位置的對象,省略i時為最后的對象s.remove(x)移除列表中第一個出現(xiàn)的xs.remove()列表反轉(zhuǎn)s.sort()列表排序,默認(rèn)為升序列表對象的主要操作方法3.7.6刪除元素的刪除操作也只適用于列表,而不適用于元組,同樣,將元組轉(zhuǎn)換為列表就可以進(jìn)行刪除操作。從列表中刪除元素很容易,可以使用del、clear、remove等操作del不僅可以刪除某個元素,還可以刪除對象clear會刪除列表中所有的元素remove(x)操作會將列表中出現(xiàn)的第一個x刪除3.8Numpy數(shù)組Numpy是Python編程語言的擴展,它增加了對大型多維數(shù)組和矩陣的支持,以及對這些數(shù)組進(jìn)行操作的大型高級數(shù)學(xué)函數(shù)庫的支持。在Numpy中,數(shù)組的類型為ndarray(n維數(shù)組),所有元素必須具有相同的類型3.8.1Numpy.array在OpenCV中,很多PythonAPI是基于NumPy的,Numpy是Python的一種開源數(shù)值計算擴展,用來處理多維數(shù)組。例1:使用Numpy生成一個灰度圖像,其中的像素均為隨機數(shù)。importcv2ascvimportnumpyasnppicturegray=np.random.randint(0,256,size=[256,256],dtype=np.uint8)cv.imshow("picturegray",picturegray)cv.waitKey()cv.destroyAllWindows()3.8.1Numpy.array例2:使用Numpy生成一個彩色圖像,其中的像素均為隨機數(shù)。importcv2ascvimportnumpyasnppicturecolor=np.random.randint(0,256,size=[256,256,3],dtype=np.uint8)cv.imshow("picturecolor",picturecolor)cv.waitKey()cv.destroyAllWindows()3.8.2創(chuàng)建Numpy數(shù)組使用numpy中的函數(shù)構(gòu)建數(shù)組使用arange()函數(shù)構(gòu)建數(shù)組importnumpyasnpa1=np.arange(12) #產(chǎn)生0到11一維數(shù)組print(a1) #[01234567891011]print(a1.shape) #(12,)使用zeros()函數(shù)創(chuàng)建一個特定大小、全部填充為0的數(shù)組importnumpyasnpa2=np.zeros(9) #產(chǎn)生全是0的一維數(shù)組print(a2) #[000000000]print(a2.shape) #(9,)3.8.2創(chuàng)建Numpy數(shù)組2從Python列表中創(chuàng)建數(shù)組importnumpyasnplist1=[2,6,7,8,1]b1=np.array(list1)print(b1)#[2,6,7,8,1]print(b1.shape)#(5,)3.8.3Numpy數(shù)組切片在Python中,可以使用像m:n這樣的表達(dá)式來選擇一系列元素,選擇的是以m開頭并以n-1結(jié)尾的元素(注意不包括第n個元素)。切片m:n也可以更明確地寫為m:n:1,其中數(shù)字1表示應(yīng)該選擇m和n之間的每個元素。要從m和n之間每兩個元素選擇一個,請使用m:n:2,p個元素,則使用m:n:p一維數(shù)組(冒號:),通過冒號分隔切片參數(shù)start:stop:step來進(jìn)行切片操作。一個參數(shù):a[i] 返回與該索引相對應(yīng)的單個元素兩個參數(shù):b=a[i:j] 表示復(fù)制a[i]到a[j-1],以生成新的list對象三個參數(shù):b=a[i:j:s] 三個參數(shù)時,i、j、s為索引,通過冒號分隔切片參數(shù)start:stop:step來進(jìn)行切片操作3.9.1字典的創(chuàng)建字典就是用大括號括起來的“關(guān)鍵字:值”對的集合體,每一個“關(guān)鍵字:值”對被稱為字典的一個元素。創(chuàng)建字典的一般格式為:字典名={[關(guān)鍵字1:值1[,關(guān)鍵字2:值2,……,關(guān)鍵字n:值n]]}其中,關(guān)鍵字與值之間用“:”分隔,元素與元素之間用逗號分隔。字典中關(guān)鍵字必須是唯一的,值可以不唯一。字典的元素是列表、元祖和字典另外,在Python中還有一種創(chuàng)建字典的方法,即dict函數(shù)法3.9.2字典的常規(guī)操作訪問在Python中可以通過關(guān)鍵字進(jìn)行訪問,一般格式為:字典[關(guān)鍵字]例如:
運行結(jié)果為:dict_1={'name':'LiHua','score':95}print(dict_1['score'])3.9.2字典的常規(guī)操作更新在Python中更新字典的格式一般為:字典名[關(guān)鍵字]=值如果在字典中已經(jīng)存在該關(guān)鍵字,則修改它;如果不存在,則向字典中添加一個這樣的新元素。
dict_2={'name':'LiHua','score':95}dict_2['score']=80 運行結(jié)果為:print(dict_2)dict_2['agr']=19print(dict_2)3.9.2字典的常規(guī)操作刪除在Python中刪除字典有很多種方法,這里介紹del和clear方法。del方法的一般格式如下:del字典名[關(guān)鍵字] #刪除關(guān)鍵字對應(yīng)的元素del字典真名 #刪除整個字典字典的刪除如下所示:dict_3={'name':'LiHua','score':95,'age':19}deldict_3['score']print(dict_3)dict_3.clear()print(dict_3)運行結(jié)果為:3.9.2字典的常規(guī)操作方法說明d.copy()字典復(fù)制,返回d的副本d.clear()字典刪除,清空字典d.pop(key)從字典d中刪除關(guān)鍵字key并返回刪除的值d.popitem()刪除字典的“關(guān)鍵字:值”對,并返回關(guān)鍵字和值構(gòu)成的元祖d.fromkeys()創(chuàng)建并返回一個新字典d.keys()返回一個包含字典所有關(guān)鍵字的列表d.values()返回一個包含字典所有值的列表d.items()返回一個包含字典所有“關(guān)鍵字:值”對的列表len()計算字典中所有“關(guān)鍵字:值”對的數(shù)目字典的其他操作方法3.9.3字典的遍歷對字典進(jìn)行遍歷一般會使用for循環(huán),但建議在訪問之前使用in或notin判斷字典的關(guān)鍵字是否存在。字典的遍歷操作如下所示。dict_4={'name':'LiHua','score':95,}forkeyindict_4.keys():print(key,dict_4[key]) forvalueindict_4.values(): print(value) foritemindict_4.items():print(item) 運行結(jié)果為:3.10.1函數(shù)的定義和調(diào)用函數(shù)是帶有名字的代碼塊,用于完成具體的任務(wù)在Python中,函數(shù)是一種運算或處理過程,即將一個程序段完成的運算或處理過程放在一個自定義函數(shù)中完成。這種操作首先要定義一個函數(shù),然后可以根據(jù)實際需要多次調(diào)用它,而不用再次編寫,大大減少了工作量。函數(shù)的定義
Python函數(shù)定義的一般格式為:def函數(shù)名([形式參數(shù)]):
函數(shù)體3.10.1函數(shù)的定義和調(diào)用有了函數(shù)的定義,在之后的編程中,只要用到該函數(shù)都可以直接調(diào)用它。調(diào)用函數(shù)的一般格式為:函數(shù)名(實際參數(shù)表)如果定義的函數(shù)有形式參數(shù),那么可以在調(diào)用函數(shù)時傳入實際參數(shù),當(dāng)然,如果沒有,可以不傳,只保留一個空括號。但需要注意的是,無論有沒有參數(shù)的傳遞,函數(shù)名后的括號都不可以省略。3.10.1函數(shù)的定義和調(diào)用例:根據(jù)海倫公式計算三角形的面積。importmathdefangle_area(a,b,c):#定義一個angle_area函數(shù)
p=(a+b+c)/2s=math.sqrt(p*(p-a)*(p-b)*(p-c))#利用海倫公式計算三角形面積
returnsarea_s=angle_area(3,4,5)#調(diào)用angle_area函數(shù)print("三角形面積為:",area_s)運行結(jié)果3.10.2參數(shù)傳遞在調(diào)用函數(shù)時,Python必須將函數(shù)調(diào)用中的每個實參都關(guān)聯(lián)到函數(shù)定義中的一個形參。因此,最簡單的關(guān)聯(lián)方式是基于實參的順序,這種關(guān)聯(lián)方式稱為位置實參位置實參演示defperson(name_n,sex_o):#定義一個person函數(shù)
print("Mynameis",name_n)print("Iama",sex_o)person('LiHua','man')#調(diào)用函數(shù)程序運行結(jié)果在函數(shù)中,可根據(jù)需要使用任意數(shù)量的位置實參,Python將按順序?qū)⒑瘮?shù)調(diào)用中的實參關(guān)聯(lián)到函數(shù)定義中相應(yīng)的形參3.10.2參數(shù)傳遞關(guān)鍵字參數(shù)是傳遞給函數(shù)的名稱。由于直接在實參中將名稱和值關(guān)聯(lián)起來,因此向函數(shù)傳遞實參時不會混淆。使用關(guān)鍵字參數(shù)時無須考慮函數(shù)調(diào)用中的實參順序,而且關(guān)鍵字參數(shù)還清楚地指出了函數(shù)調(diào)用中各個值的用途。在Python中,關(guān)鍵字參數(shù)的形式為:
形參名=實參值關(guān)鍵字參數(shù)演示defperson(name_n,sex_o):#定義一個person函數(shù)
print("Mynameis",name_n)print("Iama",sex_o)person(name_n='LiHua',sex_o='man')#調(diào)用函數(shù)程序運行結(jié)果3.10.2參數(shù)傳遞編寫函數(shù)時,可以為每個形參指定默認(rèn)值。在調(diào)用函數(shù)中為形參提供了實參時將使用指定的實參值;否則將使用形參的默認(rèn)值。因此,為形參指定默認(rèn)值后,可在函數(shù)調(diào)用中省略相應(yīng)的實參。在Python中,默認(rèn)值參數(shù)的形式為:
形參名=默認(rèn)值默認(rèn)值參數(shù)演示defperson(name_n,sex_o='man'): #定義一個person函數(shù)
print("Mynameis",name_n)print("Iama",sex_o)person(name_n='LiHong',sex_o='woman') #調(diào)用函數(shù),修改第二個參數(shù)person(name_n='LiHua') #采用默認(rèn)參數(shù)程序運行結(jié)果3.11.1類與對象類是一種廣義的數(shù)據(jù),這種數(shù)據(jù)類型的元素既包含數(shù)據(jù),也包含操作數(shù)據(jù)的函數(shù)類的創(chuàng)建在Python中,可以通過class關(guān)鍵字來創(chuàng)建類。類的格式一般如下:claas類名:
類體類一般由類頭和類體兩部分組成。類頭由關(guān)鍵字class開頭,后面緊跟著類名,類體包括所有細(xì)節(jié),向右縮進(jìn)對齊3.11.1類與對象例
創(chuàng)建Dog類classDog():def_init_(self,name,age):#初始化Dog類
=nameself.age=agedefsit(self):#定義類方法
print(.title()+"isnowsitting.")defroll_over(self):#定義類方法
print(.title()+"rolledover!"根據(jù)Dog類創(chuàng)建的每個實例都將存儲名字和年齡,我們賦予每只小狗蹲下(sit())和打滾(roll_over())的能力。類中的函數(shù)稱為方法,之前或今后學(xué)習(xí)的方法都適用于它。_init_())是一個特殊的方法,每當(dāng)根據(jù)Dog類創(chuàng)建新實例時,Python都會自動運行該方法3.11.1類與對象類的使用(實例化)進(jìn)行Dog類的實例化:my_dog=Dog('wangcai',6)print("Mydog'snameis"+my_.title())print("Mydogis"+str(my_dog.age)+"yearsold.")程序運行結(jié)果:
(Dog類實例化顯示結(jié)果)3.11.1類與對象屬性和方法的訪問句點表示法訪問屬性:my_my_dog.age訪問Dog類中定義的name和age屬性訪問方法:my_dog=Dog('wangcai',6)my_dog.sit()my_dog.roll_over()訪問Dog類中定義的sit()和roll.over()方法3.11.2繼承與多態(tài)繼承如果要編寫的類是另一個現(xiàn)成類的特殊版本,則可使用繼承的方法。一個類繼承另一個類時,它將自動獲得另一個類的所有屬性和方法。原有的類稱為父類,新創(chuàng)建的類稱為子類。子類除了繼承父類的屬性和方法之外,同時也有自己的屬性和方法在Python中定義繼承的一般格式為:Class子類名(父類名) 類體3.11.2繼承與多態(tài)多態(tài)多態(tài)是指不同的對象收到同一種消息時產(chǎn)生不同的行為。在Python中,消息是指函數(shù)的調(diào)用,不同的行為是指執(zhí)行不同的函數(shù)在例3-21的程序中中,Animal類和兩個子類中都有talk()方法,雖然同名,但是在每個類中調(diào)用的函數(shù)是不一樣的。當(dāng)調(diào)用該方法時,所得結(jié)果取決于不同的對象,同樣的信息在不同的對象下所得的結(jié)果不同,這就是多態(tài)的體現(xiàn)。3.12Python調(diào)用MATLAB程序Python調(diào)用MATLAB函數(shù)首先要找到MATLABR2017b中python所在的安裝路徑,如D:\ProgramFiles\MATLAB\R2017b\extern\engines\python,打開文件夾setup.py是python調(diào)用MATLAB所需要的文件。3.12Python調(diào)用MATLAB程序MATLAB提供了一套python接口,即MATLABAPIforPython,需要我們自行安裝,在命令行中輸入下列命令cd:D:\ProgramFiles\MATLAB\R2017b\extern\engines\pythonpythonsetup.pyinstall3.12Python調(diào)用MATLAB程序打開MATLAB中的build目錄,將目錄中的matlab文件夾復(fù)制到D:\ProgramFiles\Python\Anaconda3\Lib文件夾下。在python中加載matlab.engine和matlab啟動Matlab引擎3.12Python調(diào)用MATLAB程序Python調(diào)用MATLAB的.m文件如調(diào)用matlab代碼add.m,MATLAB端的代碼如下:a=1.0;b=2.0;c=a+b將add.m拷貝到python項目文件下。python調(diào)用add.m,python端代碼如下:importmatlabimportmatlab.engine #importnumpyasnpeng=matlab.engine.start_matlab()eng.add(nargout=0)執(zhí)行結(jié)果為:3思考與練習(xí)3-1簡述Python和PyCharm安裝的具體步驟。3-2Python具有哪幾類編譯器,各有何特點?3-3使用Numpy生成一個灰度圖像,其中的像素均為隨機數(shù)。3-4使用Numpy生成一個彩色圖像,其中的像素均為隨機數(shù)。3-5編程實現(xiàn)使用arange()函數(shù)構(gòu)建數(shù)組的程序。3-6簡述在Python中,Numpy數(shù)組切面的特點及引用規(guī)則。3-7舉例說明Python調(diào)用Matlab程序的步驟。第4章機器視覺測量系統(tǒng)4.1工業(yè)相機4.2鏡頭 4.2.1鏡頭結(jié)構(gòu) 4.2.2現(xiàn)場 4.2.3光學(xué)倍率和數(shù)值孔徑 4.2.4景深 4.2.5曝光量和光圈數(shù) 4.2.6分辨率 4.2.7鏡頭選擇4.3光源 4.3.1光源的基本性能參數(shù) 4.3.2常見可用光源4.4圖像采集卡4.5數(shù)據(jù)通信接口
第4章機器視覺測量系統(tǒng)機器視覺測量系統(tǒng)包含工業(yè)相機、光源照明系統(tǒng)與圖像處理軟件、圖像采集系統(tǒng)、數(shù)據(jù)通信接口。除具備上述硬件系統(tǒng)后,工業(yè)相機成像后,需要進(jìn)行攝像機標(biāo)定,包括坐標(biāo)系間的變換關(guān)系,工業(yè)相機成像模型。一個典型的工業(yè)機器視覺系統(tǒng)包括:光源、鏡頭(定焦鏡頭、變倍鏡頭、遠(yuǎn)心鏡頭、顯微鏡頭)、相機(包括CCD相機和COMS相機)、圖像處理單元(或圖像捕獲卡)、圖像處理軟件、監(jiān)視器、通訊/輸入輸出單元等。第4章機器視覺測量系統(tǒng)工業(yè)機器視覺系統(tǒng)定焦鏡頭
光源鏡頭圖像處理單元相機圖像處理軟件監(jiān)視器通訊/輸入輸出單元變倍鏡頭
遠(yuǎn)心鏡頭
顯微鏡頭
CCD相機
COMS相機
4.1
工業(yè)相機工業(yè)相機是視覺系統(tǒng)的關(guān)鍵部件,其性能直接影響到識別精度和定位抓取的精度。選用工業(yè)相機要考慮到工件托盤的特征、工件的輪廓特征以及光線等條件。工業(yè)相機又稱工業(yè)攝像頭、工業(yè)攝像頭、工業(yè)照相機等。根據(jù)所使用的的芯片類型分為工業(yè)CCD相機和工業(yè)CMOS相機;根據(jù)信號種類分為工業(yè)模擬相機和工業(yè)數(shù)字相機;其中數(shù)字相機又分為:GigE千兆網(wǎng)、USB2.0、USB3.0、CameraLink、1394A和1394B等多種接口。4.1
工業(yè)相機CCD相機
COMS相機
根據(jù)使用的芯片不同:根據(jù)信號種類:工業(yè)數(shù)字相機
工業(yè)模擬相機
GigE千兆網(wǎng)USB2.0 USB3.0 CameraLink
1934A
1934B
4.2
鏡頭鏡頭相當(dāng)于人眼的晶狀體,如果沒有晶狀體,人眼看不到任何物體;如果沒有鏡頭,攝像機所輸出的圖像就是白茫茫的一片,沒有清晰的圖像輸出。當(dāng)人眼的睫狀體無法按需要調(diào)整晶狀體凸度時,將出現(xiàn)人們常說的近視(或遠(yuǎn)視)眼,眼前的景物就變得模糊不清;攝像機與鏡頭的配合也有類似現(xiàn)象,當(dāng)圖像變得不清楚時,可以調(diào)整攝像機的像方焦點,改變攝像機芯片與鏡頭基準(zhǔn)面的距離(相當(dāng)于調(diào)整人眼晶狀體的凸度),可以將模糊的圖像變得清晰。由此我們知道,光學(xué)鏡頭的主要作用是將景物的光學(xué)圖像聚焦在圖像傳感器的光敏陣列上。視覺系統(tǒng)處理的所有圖像信息均通過鏡頭得到,鏡頭的質(zhì)量直接影響視覺系統(tǒng)的整體性能4.2
鏡頭分類依據(jù)類型說明工作波長紫外鏡頭同一光學(xué)系統(tǒng)對不同波長的光其折射率不同,這導(dǎo)致同一點發(fā)出的不同波長的光成像時不能會聚成一點,從而產(chǎn)生色差。常用鏡頭的消色差設(shè)計只針對可見光范圍,而應(yīng)用于其他波段的鏡頭則需要進(jìn)行專門的消色差設(shè)計可見光鏡頭近紅外鏡頭紅外鏡頭變焦與否定焦鏡頭(按焦距長短分)魚眼鏡頭焦距長短劃分不是以焦距的絕對值為首要標(biāo)準(zhǔn),而是以像角的大小為主要區(qū)分依據(jù),所以當(dāng)靶面的大小不等時,其標(biāo)準(zhǔn)鏡頭的焦距大小也不同短焦鏡頭標(biāo)準(zhǔn)鏡頭長焦鏡頭變焦鏡頭手動變焦變焦鏡頭最長和最短焦距值之比稱為變焦倍率電動變焦4.2
鏡頭視場大小廣角鏡頭視角90°以上,觀察范圍較大,短焦距提供寬角度視場,魚眼鏡頭是一種焦距約6~16mm的短焦距超廣角攝影鏡頭標(biāo)準(zhǔn)鏡頭視角50°左右,使用范圍較廣長焦(遠(yuǎn)攝)鏡頭視角20°以內(nèi),焦距幾十或上百毫米,長焦距提供高倍放大變焦鏡頭鏡頭焦距連續(xù)可變,焦距可以從廣角變到長焦工作距離望遠(yuǎn)鏡頭物距很大普通攝影鏡頭物距適中顯微鏡頭物距很小分類依據(jù)類型說明4.2
鏡頭接口類型C型鏡頭基準(zhǔn)面至焦平面距離為17.526mm,C型鏡頭與CS型攝像機配合使用需在二者之間增加一個5mm的C/CS轉(zhuǎn)接環(huán)CS型鏡頭基準(zhǔn)面至焦平面距離為12.5mmF型F接口鏡頭是尼康鏡頭的接口標(biāo)準(zhǔn),又稱尼康口,是通用型接口,一般適用于焦距大于25mm的鏡頭、以及靶面大于1英寸的攝像機V型V接口鏡頭是施耐德鏡頭主要使用的標(biāo)準(zhǔn),一般也用于攝像機靶面較大或特殊用途的鏡頭特殊用途鏡頭顯微鏡頭一般用于光學(xué)倍率大于10:1的系統(tǒng),但由于目前CCD像元尺寸已經(jīng)做到3μm以內(nèi),所以光學(xué)倍率大于2:1時也會選用顯微鏡頭微距鏡頭一般是指光學(xué)倍率為2:1~1:4范圍內(nèi)特殊設(shè)計的鏡頭。當(dāng)圖像質(zhì)量要求不高時,一般可采用在鏡頭和攝像機之間增加近攝接圈的方式或在鏡頭前增加近拍鏡的方式達(dá)到放大成像的效果遠(yuǎn)心鏡頭主要為糾正傳統(tǒng)鏡頭視差而特殊設(shè)計的鏡頭,可以在一定的物距范圍內(nèi),使得拍攝到的圖像其放大倍率不隨物距的變化而變化分類依據(jù)類型說明4.2
鏡頭按照有效像場的大小進(jìn)行分類
鏡頭類型有效像場尺寸(1英寸=25.4mm)電視攝像鏡頭1/4英寸攝像鏡頭3.2mm×2.4mm(對角線4mm)1/3英寸攝像鏡頭4.8mm×3.6mm(對角線6mm)1/2英寸攝像鏡頭6.4mm×4.8mm(對角線8mm)2/3英寸指像鏡頭8.8mm×6.6mm(對角線11mm)1英寸攝像鏡頭12.8mm×9.6mm(對角線16mm)電影攝影鏡頭35mm電影攝影鏡頭21.95mm×16mm(對角線27.16mm)16mm電影攝影鏡頭10.05mm×7.42mm(對角線12.49mm)照相鏡頭135型攝影鏡頭36mm×24mm127型攝影鏡頭40mm×40mm120型攝影健頭80mm×60mm中型攝影鏡頭82mm×56mm大型攝影鏡頭240mm×180mm4.2
鏡頭由于系統(tǒng)中所用攝像機的靶面尺寸有各種型號,所以在選擇鏡頭時須注意鏡頭的有效像場應(yīng)該大于或等于攝像機的靶面尺寸,否則成像的邊角部分會模糊甚至沒有影像。下面介紹鏡頭的結(jié)構(gòu)、相關(guān)參數(shù)及鏡頭選擇方法,以便在實際應(yīng)用中獲取最優(yōu)的系統(tǒng)性能。4.2.1
鏡頭結(jié)構(gòu)鏡頭由多個透鏡、可變(亮度)光圈和對焦環(huán)組成,有些鏡頭有固定調(diào)節(jié)系統(tǒng)。使用時通過觀察顯示圖像的明亮程度及清晰度來調(diào)整可變光圈和焦點4.2.2
視場視場(FOV)是指系統(tǒng)能夠觀察到的物體的物理尺寸范圍,也就是CCD芯片上所成圖像最大時對應(yīng)的物體的大小。它與工作距離dw,焦距f、CCD芯片尺寸sc有關(guān)。在不使用近攝環(huán)的情況下,四個參數(shù)之間的關(guān)系可用以下比例表達(dá)式表示
光學(xué)成像示意圖4.2.3
光學(xué)倍率和數(shù)值孔徑光學(xué)倍率是指成像大小與物體尺寸的比值,可以表示為
式中: NA——物方數(shù)值孔徑 NA'——像方數(shù)值孔徑物方孔徑角和折射率分別為u和n,像方孔徑角和折射率分別為u'和n’,則物方和像方的數(shù)值孔徑分別表示為
數(shù)值孔徑示意圖
4.2.4
景深拍攝有限距離的景物時,可在像面上成清晰圖像的物距范圍叫做景深按理想光學(xué)系統(tǒng)的特性及透鏡公式計算: (4-5)對于從透鏡中心至圖像平面的距離,只有一個距離等于z的空間平面與之共軛,該平面稱為對準(zhǔn)平面。嚴(yán)格來講,除對準(zhǔn)平面上的點能成點像外,其他空間點在圖像平面上只能為一個彌散斑。當(dāng)彌散斑小于一定限度時,仍可認(rèn)為是一個點,這是由成像裝置的空間分辨率所決定的,于是小于成像裝置分辨率的一定量的離焦可以忽略。
4.2.4
景深
4.2.4
景深物點處于離焦位置時,成像在圖像平面上的是一個圓形的彌散斑。如果圓斑的直徑小于成像裝置的分辨率,離焦量可以忽略。假設(shè)圓斑直徑為b’,入射光瞳直徑為D,焦距為f,透鏡中心距圖像平面的長度為。如果圖像平面向透鏡方向移動到一個新的距離,那么模糊程度為: (4-6)根據(jù)相似三角形,b’/2與之比等于d/2與之比。由式(4-5)能分別解出對應(yīng)于z和z1情況下的
和
,并且將這些表達(dá)式代入式(4-6)得到與物距相關(guān)的模糊量: (4-7)
4.2.4
景深假設(shè)b等于可以接受的彌散圓的最大直徑,由式(4-7)計算出能成清晰像的最近平面(即近景平面)的距離: (4-8)為了計算遠(yuǎn)景平面的距離,讓 (4-9)式中,是對應(yīng)于最大模糊量情況下的圖像平面遠(yuǎn)離透鏡方向移動到一個新的距離。同理可以得到: (4-10)進(jìn)一步求解式(4-10)得到遠(yuǎn)景平面距離
4.2.4
景深上面的公式給出了這條與近景平面位置與焦距f、入射光瞳直徑D、最大可接受的像糊量b’、對準(zhǔn)平面位置z之間的關(guān)系。
,稱為超焦距(hyperfocaldistance),此時,遠(yuǎn)景平面位置和景深為無窮遠(yuǎn)。遠(yuǎn)景與近景平面位置之差表示為景深:由上式可知,景深與孔徑光闌(光圈),焦距,鏡頭與物體間距離有直接的關(guān)系。焦距越短,景深越大;鏡頭離物體的距離越遠(yuǎn),景深越大;光圈越小,景深越大。光圈增大,通光量增加,景深減小,于是在光圈與景深之間需要有一個折中或平衡。而小光圈和良好的光線使聚焦更簡單。
4.2.5
曝光量和光圈數(shù)攝像機收集到的光景,即曝光量(exposure),依賴于到達(dá)像面上的光強(圖像輻照度,imageirradiance)與曝光持續(xù)時間(快門速度,shutterspeed)的乘積 功率乘以時間所得結(jié)果為能量,當(dāng)圖像輻照度的單位為W/m2時,曝光量的單位為J/m2。光圈數(shù),或稱F數(shù)(F-number,f#),它與焦距f,入射光瞳直徑D之間的關(guān)系為指定物鏡以F數(shù)為單位,因為對于相同F(xiàn)數(shù)的不同物鏡來說,圖像強度(恒定快門速度下的曝光量)是一樣的。換句話說,F(xiàn)數(shù)表征單位入射光瞳直徑下不同焦距透鏡的接受光強的能力。
4.2.5
曝光量和光圈數(shù)F數(shù)是以
為公比的等比級數(shù),因為兩倍入瞳面積(aperturearea)等于入瞳直徑增加
倍,F(xiàn)數(shù)的常用值為1.4、2、2.8、4、5.6、8、11、16、22等。每一擋F數(shù)的變化改變1.4倍入瞳直徑,提高2倍到達(dá)像面的光強。最小F數(shù)是衡量鏡頭質(zhì)量好壞的重要參數(shù)之一。例如,電影攝影機用的鏡頭,最小F數(shù)可達(dá)0.85。F數(shù)越小,表示它能在光線較暗的情況曝光或用較短的時間曝光,可以進(jìn)行高速攝影。攝影光學(xué)系統(tǒng)采用調(diào)節(jié)光圈大小的方法來調(diào)節(jié)F數(shù),光圈越小,F(xiàn)數(shù)越大,景深也越大,但由于像面的照度變小,需要相應(yīng)增加曝光時間,才能使感光底片得到相同的曝光量,定量關(guān)系是:曝光時間與F數(shù)的平方成正比。4.2.6
分辨率從波動光學(xué)的角度看,當(dāng)光通過光學(xué)系統(tǒng)中的光闌等限制光波傳播的光學(xué)元件時要發(fā)生衍射,因而物點的像并不是一個幾何點,而是以像點為中心具有一定大小的斑,稱為愛里斑(Airydisk)。如果兩個物點相距很遠(yuǎn),它們各自形成的愛里斑就比較遠(yuǎn),它們的像就容易區(qū)分開;如果兩個物點相距很近,對應(yīng)的愛里斑重疊太多,就不能清楚地分辨出兩個物點的像,所以光的衍射限制了光學(xué)成像系統(tǒng)的分辨能力瑞利(Raylcigh)判據(jù):當(dāng)一個愛里斑的邊緣正好與另一個愛里斑的中心重合時,這兩個愛里斑剛好能被區(qū)分開,如圖4-6所示。瑞利判據(jù)也是一條經(jīng)驗判據(jù),它是根據(jù)正常人眼的分辨能力提出的,正常人眼可以分辨出光強差20%的差別,當(dāng)一個愛里斑邊緣與另一個愛里斑中心重疊時,兩個愛里斑中心的光強是兩中心連線中點處光強的1.2(1.0/0.7351.2)倍。剛好被人眼區(qū)分開。用光學(xué)術(shù)語來說,瑞利判據(jù)定義了像中的圓形分辨單元,因為兩個點光源可以被分辨的條件是它們不落在同一個分辨單元里。4.2.6
分辨率根據(jù)以上描述,瑞利距離可以表示為
圖4-6瑞利判據(jù)示意圖當(dāng)衍射斑中心距離大于或等于時可以分辨,小于時不能分辨。4.2.6
分辨率如果使用最小分辨角來描述,則瑞利判據(jù)可以表示為
。也就是說,兩個愛里斑中心對圓孔中心的張角,正好等于愛里斑半徑對圓孔中心的張角。光學(xué)系統(tǒng)的分辨率定義為的倒數(shù),即
(4-17)式(4-17)表明,增大透鏡的直徑或減小入射光的波長都可以提高系統(tǒng)的光學(xué)分辨率。在天文望遠(yuǎn)鏡中,為了提高分辨率和增加光通量,總是使用直徑很大的透鏡作為物鏡。例如,加那列望遠(yuǎn)鏡通光孔徑達(dá)10.4m。而在顯微鏡中,為了提高分辨率,可用紫外光照射,在電子顯微鏡(electronmicorscope)中,電子物質(zhì)波的波長很短(0.001~0.1nm),因此電子顯微鏡的分辨率可比一般光學(xué)顯微鏡提高數(shù)千倍。4.2.6
分辨率式(4-17)決定了視場中心的分辨率,視場邊緣由于成像光束的孔徑角比軸上點小,分辨率有所降低。實際的成像物鏡總有一定的剩余像差,其分辨率要比理想分辨率低得多,而視場邊緣受軸外像差和光束漸暈的影響,要低得更多。有人認(rèn)為瑞利判據(jù)過于寬松,于是又提出另外兩個判據(jù),即道斯(Dawes)判據(jù)和斯派羅(Sparrow)判據(jù)。根據(jù)道斯判據(jù),人眼剛好能分辨兩個衍射斑的最小中心距為
根據(jù)斯派羅判據(jù),兩衍射斑之間的最小中心距為
4.2.6
分辨率通過單獨分析單個透鏡分辨率以及后面章節(jié)中的光電成像器件和圖像采樣等,將它們綜合起來確定整個數(shù)字成像系統(tǒng)的像素間距。無論物體中包含有多高的頻率,超過成像系統(tǒng)MTF的截止頻率的那些信息并不能提供給數(shù)字化設(shè)備。而這個頻率也不會超出初始成像透鏡或反射鏡的光學(xué)傳遞函數(shù)(OTF)的截止頻率
這樣,如果我們令折疊頻率(采樣頻率的一半)等于OTF的截止頻率,就可以避免混疊。恰當(dāng)進(jìn)行插值,就能根據(jù)采樣點無誤差地重構(gòu)圖像。令折疊頻率等于圖像中出現(xiàn)的最高頻率,稱為按Nyquist標(biāo)準(zhǔn)采樣。按此準(zhǔn)則像素間距對攝像機而言為
。如果按照瑞利距離,像素間距應(yīng)為
,該數(shù)值比Nyquist標(biāo)準(zhǔn)給出的大22%。4.2.7
鏡頭選擇光學(xué)鏡頭是視覺測量系統(tǒng)的關(guān)鍵設(shè)備,在選擇鏡頭時需要考慮多方面的因素。(1)鏡頭的成像尺寸應(yīng)大于或等于攝像機芯片尺寸。(2)考慮環(huán)境照度的變化。(3)選用合適的鏡頭焦距。(4)成像過程中需要改變放大倍率,采用變焦鏡頭,否則采用定焦鏡頭,并根據(jù)被測目標(biāo)的狀態(tài)應(yīng)優(yōu)先選用定焦鏡頭。(5)接口類型互相匹配。(6)特殊要求優(yōu)先考慮。結(jié)合實際應(yīng)用特點,可能會有特殊要求。4.3光源光源照明系統(tǒng)是影響機器視覺系統(tǒng)檢測質(zhì)量的重要因素,其直接影響輸入數(shù)據(jù)的質(zhì)量和應(yīng)用效果。需要具有以下特點或要求:(1) 盡可能突出物體的特征;(2) 增強目標(biāo)區(qū)域與背景區(qū)域的對比度,能夠有效的分割圖像;(3) 光譜要求:光源光譜功率分布的峰值波長應(yīng)與光電成像器件的靈敏波長一致;(4) 強度要求:光強會影響攝像機的曝光,光線不足對比度變低,需要加大放大倍數(shù),這樣噪聲也會相應(yīng)放大,也可能使鏡頭的光圈加大,于是景深將減小。反過來,光強過高會浪費能量,并產(chǎn)生熱量;(5) 均勻性要求:在所有的機器視覺應(yīng)用中,都會要求均勻的光照,因為所有的光源隨著距離的增加和照射角度的偏離,其照射強度減小,所以在對大面積物體照射時,會帶來較大的問題,有時只能做到視場的中心位置保持均勻;(6) 成像質(zhì)量要求:物體位置變化不影響成像質(zhì)量,測量過程中在一定范圍內(nèi)移動物體時,照明效果不受影響。4.3.1光源的基本性能參數(shù)輻射效率和發(fā)光效率在給定的波長范圍內(nèi),某一光源所發(fā)出的輻射通量與產(chǎn)生該輻射通量所需要的功率P之比,成為該光源的輻射效率在可見光范圍內(nèi),某一光源的發(fā)光效率為光通量與功率P之比
和分別表示測量系統(tǒng)的光譜范圍,實際應(yīng)用中,采用輻射效率高的光源以節(jié)省能源。4.3.1光源的基本性能參數(shù)光譜功率分布光源輸出的功率與光譜有關(guān),即與光的波長有關(guān),稱為光譜的功率分布。四種典型的光譜功率分布如圖4-7所示。圖4-7(a)為線光源,如低壓汞燈光譜的功率分布;圖4-7(b)為帶狀光源,如高壓汞燈光譜;圖4-7(c)為連續(xù)光譜光譜,如白熾燈、鹵素?zé)艄庾V;圖4-7(d)為復(fù)合光譜,它由連續(xù)光譜與線狀、帶狀光譜組合而成,熒光燈光譜。4.3.1光源的基本性能參數(shù)光譜功率分布圖4-7四種典型的光譜功率分布(a)線狀光源(b)帶狀光源(c)連續(xù)光源(d)復(fù)合光源4.3.1光源的基本性能參數(shù)光源的顏色光源的顏色包含鈉色表和顯色性。一般用眼睛直接觀察光源時所看到的顏色稱為光源的色表,如高壓鈉燈的色表呈黃色,熒光燈的色表呈白色等。當(dāng)用這種光源照射物體時,物體呈現(xiàn)的顏色(即物體反射光在人眼內(nèi)產(chǎn)生的顏色感覺)與該物體在完全輻射體照射下所呈現(xiàn)的顏色的一致性,稱為該光源的顯色性。4.3.2常用可見光源任何發(fā)出光輻射的物體都可以叫做光輻射源。這里所指的光輻射包括紫外光、可見光洪紅外光的輻射。通常把能夠發(fā)出可見光的物體叫做光源,而把能夠發(fā)出非可見光的物體叫做輻射源。按照光輻射來源的不同,通常將光源分成兩大類:自然光源和人工光源。自然光源主要包括太陽、恒星等,這些光源對地面輻射通常不穩(wěn)定且無法控制,在視覺測量中很少使用,并且作為雜散光予以消除或抑制,因而視覺測量系統(tǒng)中大量使用人工光源。按照工作原理不同,人工光源大致分為熱輻射光源、氣體放電光源、發(fā)光二極管和激光光源。4.3.2常用可見光源
自然光源:太陽、恒星…… 按照光輻射來源不同
人工光源(按照工作原理不同)
熱輻射光源氣體放電光源發(fā)光二極管激光光源4.4圖像采集卡計算機通過圖像采集卡(imagecapturecard)接收來自圖像傳感器的模擬信號,對其進(jìn)行采樣、量化成數(shù)字信號,然后壓縮編碼成數(shù)字視頻序列。一般圖像采集卡采用幀內(nèi)壓縮的算法把數(shù)字化的視頻存儲成AVI文件,高檔的圖像采集卡直接把采集到的數(shù)字視頻數(shù)據(jù)實時壓縮成MPEG-1格式的文件4.4圖像采集卡圖像采集卡模擬圖像采集卡與數(shù)字圖像采集卡彩色圖像采集卡與黑白圖像采集卡面掃描圖像采集卡與線掃描圖像采集卡圖像采集卡的分類4.4圖像采集卡圖像采集卡的技術(shù)參數(shù)(1)圖像傳輸格式。圖像采集卡需要支持系統(tǒng)中攝像機所采用的輸出信號格式大多數(shù)攝像機采用RS422或EIA(LVDS)作為輸出信號格式。在數(shù)字?jǐn)z像機中廣泛應(yīng)用IEEE1394,USB2.0,USB3.0,GigE,5GigE和CameraLink幾種圖像傳輸形式。(2)圖像格式(像素格式)①黑白圖像。通常情況下,圖像灰度等級可分為256級,即以8位表示。
在對圖像灰度有更高的要求時,可用10位、12位等來表示。②彩色圖像。彩色圖像可由RGB(YUV)3種色彩組合而成,根據(jù)其亮度
級別的不同有8-8-8,10-10-10等格式。4.4圖像采集卡圖像采集卡的技術(shù)參數(shù)(3)傳輸通道數(shù)。當(dāng)攝像機以較高速率拍攝高分辦率的圖像時,會產(chǎn)生很高的輸出速率,一般需要多
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現(xiàn)大全人事管理篇十篇
- 《行政職業(yè)能力測驗》2024年公務(wù)員考試尤溪縣臨考沖刺試卷含解析
- 八下期末考拔高測試卷(5)(解析版)
- 寒假自習(xí)課 25春初中道德與法治八年級下冊教學(xué)課件 第三單元 第五課 第2課時 基本政治制度
- 《皮外骨傷科病證》課件
- 鐵路線路設(shè)計合同三篇
- 服裝店衛(wèi)生消毒指南
- 幼兒園工作總結(jié)攜手陪伴成長無憂
- 餐飲行業(yè)助理工作總結(jié)
- 感恩父母演講稿錦集八篇
- 明細(xì)賬(三欄式)模板
- 正大天虹方矩管鍍鋅方矩管材質(zhì)書
- 2024年山東魯商集團有限公司招聘筆試參考題庫含答案解析
- 妊娠劇吐伴酮癥護理查房課件
- 200#溶劑油安全技術(shù)說明書
- 單位洗車房管理制度
- 廣西壯族自治區(qū)欽州市浦北縣2022-2023學(xué)年七年級上學(xué)期期末英語試題
- 動力學(xué)全套課件
- 廣東省深圳市2022-2023學(xué)年六年級上學(xué)期語文期末試卷(含答案)6
- 2022-2023學(xué)年北京市海淀區(qū)高一(上)期末生物試卷(附答案詳解)
- 河南省出版物經(jīng)營許可證申請登記表
評論
0/150
提交評論