版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
UptechHarmonyCo.,智元工智能人Python視覺與人工智能編程實驗指導(dǎo)書上冊v1.0作者:楊博TELptechHarmonyCo.,智元工智能人Python視覺與人工智能編程實驗指導(dǎo)書上冊v1.0作者:楊博TEL4890/48871UptechHarmonyCo.,目錄系統(tǒng)鏡像的安裝 2一.人運動測試 11二.類操作繼承及攝像頭圖像 18三.圖像基本操作 26四.形狀提取 36五.人臉識別UptechHarmonyCo.,目錄系統(tǒng)鏡像的安裝 2一.人運動測試 11二.類操作繼承及攝像頭圖像 18三.圖像基本操作 26四.形狀提取 36五.人臉識別 41六、識別 54七、手勢識別 63八、語音識別 73九、人臉表情識別 88十、TEL4890/48872UptechHarmonyCo.,掌握如何安裝系統(tǒng)鏡像PC一臺,電腦顯示器線,網(wǎng)線一根,TF卡(MicroSD)一張,一個,無線鍵盤鼠標。實驗內(nèi)容:(一)安裝系統(tǒng)1.準備工具TF(Micro機箱口。SD)一張,TFUptechHarmonyCo.,掌握如何安裝系統(tǒng)鏡像PC一臺,電腦顯示器線,網(wǎng)線一根,TF卡(MicroSD)一張,一個,無線鍵盤鼠標。實驗內(nèi)容:(一)安裝系統(tǒng)1.準備工具TF(Micro機箱口。SD)一張,TF中,如下圖所示。把插有TF卡的2SDFormatter(1)SDFormatter已好直接打開文件,操作如下圖所示:(2)打開文件后進入eNextTEL4890/48873UptechHarmonyCo.,(3)NextProgramUptechHarmonyCo.,(3)NextProgramMaintenanceModifynext(4)Next(5)Next下一步進入到安裝頁面,選Install安裝即可:TEL4890/48874UptechHarmonyCo.,(6)安裝SDFormatter到電腦上,install安裝成功后會顯示UptechHarmonyCo.,(6)安裝SDFormatter到電腦上,install安裝成功后會顯示Finish(7)安裝SDFormatter成功后,桌面上會顯示SDFormatter的快鍵圖標3TFSDFormatter安裝成功后,將你的內(nèi)存卡插在電腦上,打開軟件TEL4890/48875UptechHarmonyCo.,如上圖打開后選擇你要格式化的內(nèi)存卡,不需其他設(shè)置,點擊Format即可,會出現(xiàn)continue是否繼續(xù),選擇“是”SD電腦的SD卡插槽中,這時要注意一下UptechHarmonyCo.,如上圖打開后選擇你要格式化的內(nèi)存卡,不需其他設(shè)置,點擊Format即可,會出現(xiàn)continue是否繼續(xù),選擇“是”SD電腦的SD卡插槽中,這時要注意一下SD卡的盤符(避免格式化錯誤的盤)出現(xiàn)上圖所示顯示為成功,成功后你的內(nèi)存卡就格式化好了。4.鏡像寫入工具Win32DiskImager(1)win32diskimager已好,只需打開win32diskimager-v0.7-binary文件夾找到Win32DiskImager.exe打開即可。TEL4890/48876UptechHarmonyCo.,(2)Win32DiskImager打開后,選擇解壓后的.img格式的Pack_pub_v3.0.img鏡像文件,Device就是你電腦中的SD卡,然后點擊write按鈕,寫入需要一段時間。注:read是給鏡像備份,SD卡寫入鏡像需要選UptechHarmonyCo.,(2)Win32DiskImager打開后,選擇解壓后的.img格式的Pack_pub_v3.0.img鏡像文件,Device就是你電腦中的SD卡,然后點擊write按鈕,寫入需要一段時間。注:read是給鏡像備份,SD卡寫入鏡像需要選write(3)寫入完成后會有successful的提示,如下圖所示。(4)寫入完成后會有一個格式化的提示,一定要按“取消”kernelpanic-notsyncing:vfs:unabletomountrootfsonunknowblock的錯誤提示!TEL4890/48877UptechHarmonyCo.,(二)智元素背包安裝1.將TF卡裝入智元素背包中,需要準備的工具如下圖所示將智元素背包上的四個卡槽擰上螺釘,如下圖所示2.TEL:010-8211UptechHarmonyCo.,(二)智元素背包安裝1.將TF卡裝入智元素背包中,需要準備的工具如下圖所示將智元素背包上的四個卡槽擰上螺釘,如下圖所示2.TEL4890/48878UptechHarmonyCo.,3.將數(shù)據(jù)供電線插在智元素背包上方的插孔內(nèi),注意接線方向,將數(shù)據(jù)供電線插在如下圖所示:人頸部的插孔內(nèi),4智元素背包的USB接口內(nèi),如下圖所示:注:智元素背包需要正確連接相機與供電數(shù)據(jù)線,并通過螺釘與人相連接UptechHarmonyCo.,3.將數(shù)據(jù)供電線插在智元素背包上方的插孔內(nèi),注意接線方向,將數(shù)據(jù)供電線插在如下圖所示:人頸部的插孔內(nèi),4智元素背包的USB接口內(nèi),如下圖所示:注:智元素背包需要正確連接相機與供電數(shù)據(jù)線,并通過螺釘與人相連接TEL4890/48879UptechHarmonyCo.,5智元素背包的USB插口中,電腦顯示器線一端插在電腦顯示屏上,一端插在智元素背包上,在智元素背包后下方有開機鍵,直接按開機鍵給人開機即可,如下圖所示6UptechHarmonyCo.,5智元素背包的USB插口中,電腦顯示器線一端插在電腦顯示屏上,一端插在智元素背包上,在智元素背包后下方有開機鍵,直接按開機鍵給人開機即可,如下圖所示6.按下智元素背包下方的開機鍵,智元素開機鍵亮起來后,在顯示屏上會顯示開機頁面,進入系統(tǒng)屏幕會顯示桌面系統(tǒng),如下圖所示TEL4890/488710UptechHarmonyCo.,開機啟動后,會自行安裝系統(tǒng),看UptechHarmonyCo.,開機啟動后,會自行安裝系統(tǒng),看sd卡的寫的速度時間會不一樣,大約10分鐘將會完成,然后就會進入到系統(tǒng)界面。至此,算是大功告成了。TEL4890/488711UptechHarmonyCo.,人運動測試1.了解如何使用類操作及類的繼承2.python控制人運動。操作系統(tǒng):Linux應(yīng)用工具:電腦顯示屏、鍵盤、鼠標、電腦顯示器線實驗內(nèi)容:classUptechHarmonyCo.,人運動測試1.了解如何使用類操作及類的繼承2.python控制人運動。操作系統(tǒng):Linux應(yīng)用工具:電腦顯示屏、鍵盤、鼠標、電腦顯示器線實驗內(nèi)容:class語句來創(chuàng)建一個新類,class之后為類的名稱并以冒號結(jié)尾:Python類的例子:TEL4890/488712UptechHarmonyCo.,使用第。Employee.empCount法init()方法是一種特殊的方法,被稱為類的構(gòu)造函數(shù)或初始化方法,當(dāng)創(chuàng)建了這個類的實例時就會調(diào)用該方法self代表類的實例,self在定義類的方法時是必須有的,雖然在調(diào)用時不必傳入相應(yīng)的參數(shù)。2.類的繼承面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實現(xiàn)這種重用的方法之一是通過繼承機制。通過繼承創(chuàng)建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類。繼承語法:在python中繼承中的一些特點:UptechHarmonyCo.,使用第。Employee.empCount法init()方法是一種特殊的方法,被稱為類的構(gòu)造函數(shù)或初始化方法,當(dāng)創(chuàng)建了這個類的實例時就會調(diào)用該方法self代表類的實例,self在定義類的方法時是必須有的,雖然在調(diào)用時不必傳入相應(yīng)的參數(shù)。2.類的繼承面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實現(xiàn)這種重用的方法之一是通過繼承機制。通過繼承創(chuàng)建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類。繼承語法:在python中繼承中的一些特點:1、如果在子類中需要父類的構(gòu)造方法就需要顯示的調(diào)用父類的構(gòu)造方法,或者不重寫父類的構(gòu)造方法。用普通函數(shù)時并不需要帶上self參數(shù)總是首先查找對應(yīng)類型的方法,如果它不能在派生類中找到對應(yīng)的方法,它才開始到基類中逐個查找。(先在本類中查找調(diào)用的方法,找不到才去基類中找)。派生類的,與他們的父類類似,繼承的基類列表跟在類名之后,如下所示:實例如下:TEL4890/488713UptechHarmonyCo.,方法重寫如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法。例如:類的私有屬性__private_attrs:兩個下劃線開頭,該屬性為私有,不能在類的外部被使用或直接UptechHarmonyCo.,方法重寫如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法。例如:類的私有屬性__private_attrs:兩個下劃線開頭,該屬性為私有,不能在類的外部被使用或直接。在類內(nèi)部的方法中使用時self.private_attrs。TEL4890/488714UptechHarmonyCo.,在類的且為第一個參數(shù)類的私有方法defself,__private_method:兩個下劃線開頭,用self.private_methods該方法為私有方法,不能在類的外部調(diào)用。在類的內(nèi)部調(diào)程序代碼:人運動測試:可以通過編寫python控制人運動首先通過nomachine連接您的智元素人,然后在桌面新建一個文件夾up_move,文件夾內(nèi)新建python輸入以下代碼:BotCtrl.py,雙擊使用Thonny打開它。importserialUptechHarmonyCo.,在類的且為第一個參數(shù)類的私有方法defself,__private_method:兩個下劃線開頭,用self.private_methods該方法為私有方法,不能在類的外部調(diào)用。在類的內(nèi)部調(diào)程序代碼:人運動測試:可以通過編寫python控制人運動首先通過nomachine連接您的智元素人,然后在桌面新建一個文件夾up_move,文件夾內(nèi)新建python輸入以下代碼:BotCtrl.py,雙擊使用Thonny打開它。importserialclassserBotControll():=serial.Serial(port="/dev/ttyUSB0",baudrate=115200,bytesize=8,parity='E',stopbits=1,timeout=2)isOpen=Truedefint(self):self.isOpen=Truedefopen(self):self.ser.open()if(ser.isOpen):self.isOpen=Trueprint("open")else:self.isOpen=FalsedefsetMoveAction(self,angle=0,speed=0,turn=0,time=500):if(self.isOpen):data=[0]*8data[0]data[1]data[2]data[3]data[4]data[5]data[6]data[7]buffer,========angle&0xFF(angle>>8)&0xFFspeed&0xFF(speed>>8)&0xFFturn&0xFF(turn>>8)&0xFFtime&0xFF(time>>8)&0xFFlen=self.GenerateCmd(0x08,0x02,0x08,data)TEL4890/488715UptechHarmonyCo.,self.ser.write(buffer)returnTruereturnFalsedefGenerateCmd(self,device,cmd,buffer=[0]*(len+6)len,data):buffer[0]buffer[1]buffer[2]===0xF50x5Fdevice&0xFFcheck=buffer[2]buffer[3]=cmd&0xFFcheck=check+buffer[3]buffer[4]=len&0xFFUptechHarmonyCo.,self.ser.write(buffer)returnTruereturnFalsedefGenerateCmd(self,device,cmd,buffer=[0]*(len+6)len,data):buffer[0]buffer[1]buffer[2]===0xF50x5Fdevice&0xFFcheck=buffer[2]buffer[3]=cmd&0xFFcheck=check+buffer[3]buffer[4]=len&0xFFcheck=check+buffer[4]foriinrange(len):buffer[5+i]=data[i]check=check+buffer[5+i]buffer[len+5]=(~check)&0xFFreturnbuffer,len+6ifname ==controll='main':BotControll()controll.open()controll.setMoveAction(0,0,100)1人是通過串口與底盤連接的,因此要引入python串口庫。3USB415ttyUSB0,波特率115200第1747人與底層通訊控制指令是一個14位數(shù)組。第10xF5第20x5F30x0040x0050x086,7(0360)8,9第10,11位:轉(zhuǎn)動速率(左正右負)12,13140xFF是計算機十六進制的表示:0xABCDEF101112131415F15F48421。ser=serial.Serial():屬性的使用方法Buffer:作為數(shù)據(jù)結(jié)構(gòu)來存放通信中和接收的數(shù)據(jù)TEL4890/488716UptechHarmonyCo.,運行此程序,你會發(fā)現(xiàn)智元素人不停原地打轉(zhuǎn)思考題:1.python中子類對父類初始化變量怎么賦值?答:1self.x=x2、對于父類的初始化參數(shù),如果不寫,默認就使用父類無參的init方法3B.init(self,aa,ab)4、使用super(子類類型,子類對象).foo()調(diào)用父類方法2.python答:1.在繼承中基類的構(gòu)造(init()方法)用。UptechHarmonyCo.,運行此程序,你會發(fā)現(xiàn)智元素人不停原地打轉(zhuǎn)思考題:1.python中子類對父類初始化變量怎么賦值?答:1self.x=x2、對于父類的初始化參數(shù),如果不寫,默認就使用父類無參的init方法3B.init(self,aa,ab)4、使用super(子類類型,子類對象).foo()調(diào)用父類方法2.python答:1.在繼承中基類的構(gòu)造(init()方法)用。被自動調(diào)用,它需要在其派生類的構(gòu)造中親自專門調(diào)在調(diào)用基類的方法時,需要加上基類的類名前綴,且需要帶上self參數(shù)變量。區(qū)別于在類中調(diào)用selfPython總是首先查找對應(yīng)類型的方法,如果它不能在派生類中找到對應(yīng)的方法,它才開始到基類中逐個查找。(先在本類中查找調(diào)用的方法,找不到才去基類中找)3.請簡述Python答:在Python中,以下劃線開頭的變量名有特殊的含義,尤其是在類的定義中。用下劃線作為變量前綴和后綴來表示類的特殊成員:l_:這樣的對象叫做保護變量,不能用'frommoduleimport*'導(dǎo)入,只有類對象和子類對象能這些變量;l l :系統(tǒng)定義的特殊成員名字;:類中的私有成員,只有類對象自己能 ,子類對象也不能到這個成員,但在對象外部可以通過“對象名._類名 ”這樣的特殊方式來。Python中沒有純粹的C++意義上的私有成員。4.解釋一下Python答:當(dāng)一個類繼承自另一個類,它就被稱為一個子類/派生類,繼承自父類/基類/超類。它會繼承/獲取所有類成員(屬性和方法)。繼承能讓我們重新使用代碼,也能更容易的創(chuàng)建和維護應(yīng)用。Python支持如下種類的繼承:單繼承:一個類繼承自單個基類多繼承:一個類繼承自多個基類多級繼承:一個類繼承自單個基類,后者則繼承自另一個基類分層繼承:多個類繼承自單個基類混合繼承:兩種或多種類型繼承的混合5.在python答:在Python中可以通過在屬性變量名前加上雙下劃線定義屬性為私有屬性特殊變量命名TEL4890/488717UptechHarmonyCo.,1、_xx以單下劃線開頭的表示的是protected。fromMimport”時,2、xx雙下劃線的表示的是私有類型的變量。只能允許這個類本身進行了,連子類也不可以用于命名一個類屬性(類變量),調(diào)用時名字被改變(在類FooBarUptechHarmonyCo.,1、_xx以單下劃線開頭的表示的是protected。fromMimport”時,2、xx雙下劃線的表示的是私有類型的變量。只能允許這個類本身進行了,連子類也不可以用于命名一個類屬性(類變量),調(diào)用時名字被改變(在類FooBar內(nèi)部,boo變成_FooBarbooself._FooBarboo)3、xxinit,import或是file。只有當(dāng)文檔有說明時使用,不要自己定義這類變量。(就是說這些是python內(nèi)部定義的變量名)在這里強調(diào)說一下私有變量,python默認的成員函數(shù)和成員變量都是公開的,沒有像其他類似語言的public,private等關(guān)鍵字修飾.但是可以在變量前面加上兩個下劃線"",這樣的話函數(shù)或變量就變成私有的.這是python的私有變量軋壓(這個翻譯好拗口),英文是(privatenamemangling.)**情況就是當(dāng)變量被標記為私有后,在變量的前端類名,再類名前添加一個下劃線"",即形成了ClassName_變量名.**6.Pythonserial答:python中pyserial模塊使用方法,pyserial模塊封裝了對串口的在支持的平臺上有統(tǒng)一的接口。。python屬性串口設(shè)置。支持不同的字節(jié)大小、停止位、校驗位和流控設(shè)置??梢杂谢蛘邲]有接收超時。APIreadwritereadline等。nullcr-lf轉(zhuǎn)換。TEL4890/488718UptechHarmonyCo.,OpenCv安裝及攝像頭圖像OpenCv了解如何在python-OpenCv攝像頭圖像操作系統(tǒng):Linux應(yīng)用工具:電腦顯示屏、鍵盤、鼠標、電腦顯示器線、OpenCv,nomachine實驗內(nèi)容:UptechHarmonyCo.,OpenCv安裝及攝像頭圖像OpenCv了解如何在python-OpenCv攝像頭圖像操作系統(tǒng):Linux應(yīng)用工具:電腦顯示屏、鍵盤、鼠標、電腦顯示器線、OpenCv,nomachine實驗內(nèi)容:安裝即可:人背包上已經(jīng)預(yù)裝了OpenCv,如果您想在自己的系統(tǒng)中安裝OpenCv,直接通過pipctrl+ALT+TsudopipinstallOpenCv-pythonpython3sudopip3installOpenCv-pythonpython-OpenCvOpenCvpkg-configOpenCv--modversion查看python版本號:可直接在命令行輸入python即可看到安裝好之后,也可以在命令行中輸入python,python2,python3(根據(jù)自己的python版本來選),回車importcv2回車cv2._version_回車如果出現(xiàn)下圖的結(jié)果,說明python3環(huán)境下的OpenCv安裝成功。TEL4890/488719UptechHarmonyCo.,2.桌面使用指南(NoMachine)NoMachine對應(yīng)平臺的版本,然后打開終端,進入到NoMachine目錄中,輸入:sudodpkg-i~/Downloads/nomachine_*.deb安裝完成。初次使用前需要插上外接顯示器、鼠標鍵盤,手動將背包連接到無線網(wǎng)絡(luò),以后背包會自動連接到該網(wǎng)絡(luò)。使用時需要確保背包與計算機終端都處于同一無線網(wǎng)絡(luò)下,點擊UptechHarmonyCo.,2.桌面使用指南(NoMachine)NoMachine對應(yīng)平臺的版本,然后打開終端,進入到NoMachine目錄中,輸入:sudodpkg-i~/Downloads/nomachine_*.deb安裝完成。初次使用前需要插上外接顯示器、鼠標鍵盤,手動將背包連接到無線網(wǎng)絡(luò),以后背包會自動連接到該網(wǎng)絡(luò)。使用時需要確保背包與計算機終端都處于同一無線網(wǎng)絡(luò)下,點擊NoMachine圖標:啟動程序:TEL4890/488720UptechHarmonyCo.,點擊“continue”在背包啟動1分鐘后即可完成初始化,并等待連接。此時NoMachine計算機運行NoMachine會自動搜索連接UptechHarmonyCo.,點擊“continue”在背包啟動1分鐘后即可完成初始化,并等待連接。此時NoMachine計算機運行NoMachine會自動搜索連接點擊圖標,開始連接:第一次連接需要輸入用戶名與 認用戶名為“pi”,看到此桌面即完成連接:為“bcsh”。TEL4890/488721UptechHarmonyCo.,設(shè)置開機啟動程序的方法(scratch模式設(shè)置方法)按上圖所示連接到桌面后,如需要運行auto文件夾下某個Python程序(以scratch.py):可以雙擊桌面上的“sys_start.sh”,選擇“打開”,此時文檔形式如下:UptechHarmonyCo.,設(shè)置開機啟動程序的方法(scratch模式設(shè)置方法)按上圖所示連接到桌面后,如需要運行auto文件夾下某個Python程序(以scratch.py):可以雙擊桌面上的“sys_start.sh”,選擇“打開”,此時文檔形式如下:cd/home/pi/Downloads/autopython3Scratch.py#此行意思是以python3運行scratch.py保存并后,重啟即可。如果開機以后運行其他程序發(fā)現(xiàn)Demo中程序不能打開攝像頭,則有可能有開機自啟動的程序正在調(diào)用攝像頭,需要把開機啟動的程序行注釋掉(在行前添加“#”)。如下所示:#cd/home/pi/Downloads/auto#python3Scratch.pyTEL4890/488722UptechHarmonyCo.,3.python-OpenCv攝像頭圖像接下來,請打開您的智元素人背包,使用nomachine連接智元素背包。在桌面新建一個文件夾,命名為my_mcr_project。進入這個文件夾,新建python文件.py。ThonnyUptechHarmonyCo.,3.python-OpenCv攝像頭圖像接下來,請打開您的智元素人背包,使用nomachine連接智元素背包。在桌面新建一個文件夾,命名為my_mcr_project。進入這個文件夾,新建python文件.py。Thonnypython,輸入以下代碼:程序代碼:TEL4890/488723UptechHarmonyCo.,攝像頭圖像importcv2importnumpycap=cv2.whileTrue:ret,frame=cv2.imshow('asnpCapture(0)cap.read()',frame)ifcv2.waitKey(1)&0xFF==breakcap.release()cv2.destroyAllWindows()如下圖所示:ord('q'):代碼詳解:3UptechHarmonyCo.,攝像頭圖像importcv2importnumpycap=cv2.whileTrue:ret,frame=cv2.imshow('asnpCapture(0)cap.read()',frame)ifcv2.waitKey(1)&0xFF==breakcap.release()cv2.destroyAllWindows()如下圖所示:ord('q'):代碼詳解:3OpenCv一個攝像頭,一般就是筆記本的內(nèi)建攝像頭。Capture()函數(shù)定義攝像頭對象,其參數(shù)0表示第5cap.read()按幀retfraeca.red(ret如果幀是正確的則返回True,如果文件到結(jié)尾,它的返回值就為False。frame就是每一幀的圖像,是個三維矩陣。第7行cv2.waitKey(1),waitKey()方法本身表示等待鍵盤輸入。參數(shù)是1,表示延時1ms切換到下一幀圖像,對于而言;參數(shù)為0,如cv2.waitKey(0)只顯示當(dāng)前幀圖像,相當(dāng)于暫停;參數(shù)過大如cv2.waitKey(1000),會因為延時過久而卡頓感受到卡頓。cASCIIescASCII27esciford()函數(shù)是chr()或unichr()的配對函數(shù),以字符作為參數(shù),返回ASCII數(shù)值,或者Unicode數(shù)值ord('q'qUnicodeqUnicode113。cv2.waitKey(1):返回與按下鍵值對應(yīng)的32位整數(shù)。0xFF:0xFF240ord0255您的鍵盤只有一個有限的字符集。9release()攝像頭,調(diào)用destroyAllWindows()關(guān)閉所有圖像窗口。TEL4890/488724UptechHarmonyCo.,點擊上方綠色箭頭運行這個,得到以下結(jié)果:可以看到圖像顯示在了右上角,按q即可。思考題:1cv2.Capture()中參數(shù)為0答:=cv2.Capture()中參數(shù)是0,表示打開筆記本的內(nèi)置攝像頭,參數(shù)是Capture(“../test.avi”)文件路徑則打開cap2.cv2.imshow()的用法?答:UptechHarmonyCo.,點擊上方綠色箭頭運行這個,得到以下結(jié)果:可以看到圖像顯示在了右上角,按q即可。思考題:1cv2.Capture()中參數(shù)為0答:=cv2.Capture()中參數(shù)是0,表示打開筆記本的內(nèi)置攝像頭,參數(shù)是Capture(“../test.avi”)文件路徑則打開cap2.cv2.imshow()的用法?答:使用函數(shù)cv2.imshow(wname,img)顯示圖像,第一個參數(shù)是顯示圖像的窗口的名顯示的圖像(imread讀入的圖像),窗口大小自動調(diào)整為圖片大小二個參數(shù)是要3.為什么要用ifcv2.waitKey(1)&0xFF==ord('q'):break答:在某些系統(tǒng)上,waitKey()可能會返回一個不僅僅編碼ASCII密鑰的值。(當(dāng)OpenCv使用GTK作為其后端GUI時,已知在Linux上發(fā)生了一個錯誤庫。)在所有系統(tǒng)上,我們可以通過SCIIkeycode=cv2.waitKey(1)返回值中的ifkeycode!=-1:keycode&=0xFFTEL4890/488725UptechHarmonyCo.,或者ifcv2.waitKey(1)&0xFF==ord('q'):BreakwaitKey(1q’被,在這之后按鍵才會被 ,并在下一次進入if語段時起作用。也即經(jīng)過無效時間以后,檢測在上一次顯示圖像的時間段內(nèi)按鍵UptechHarmonyCo.,或者ifcv2.waitKey(1)&0xFF==ord('q'):BreakwaitKey(1q’被,在這之后按鍵才會被 ,并在下一次進入if語段時起作用。也即經(jīng)過無效時間以后,檢測在上一次顯示圖像的時間段內(nèi)按鍵‘q’有沒有被按下,若無則跳出if語句段,捕獲并顯示下一幀圖像。if語句段中一直等待‘q’被鍵入。cv2.waitKey(1)與0xFF(11111111)cv2.waitKey(1)的返回值不止880。4.如何用OpenCv,顯示,并保存圖像呢?答:(1)OpenCv中使用數(shù)據(jù)結(jié)構(gòu)CvCapture*指向打開 文件(或者攝像頭)的相關(guān)結(jié)構(gòu)。具體函數(shù)可以用CvCapture*pCap=cvCreateCameraCaputre(-1)得到;從攝像頭得到的圖片可以用pCap通過下面的方式獲得:IpIImage*image;Image=cvQueryFrame(pCap);該函數(shù)返回從攝像頭獲取的圖片。將上述函數(shù)在循環(huán)中反復(fù)調(diào)用,并將image變量顯示于窗口之上。將image變量保存。保存的名稱為000.jpg,001.jpg,100.jpg。依次循環(huán)。5.OpenCv中通過cv2.drawContours在圖像上繪制輪廊有幾個參數(shù)?答:OpenCvcv2.drawContours第一個參數(shù)是指明在哪幅圖像上繪制輪廓第二個參數(shù)是輪廓本身,在Pythonlist第三個參數(shù)指定繪制輪廓list中的哪條輪廓,如果是-1,則繪制其中的所有輪廓第四個參數(shù)是輪廓線條的顏色第五個參數(shù)是輪廓線條的粗細6.Python語言實現(xiàn)在運用camera.release()所遇到的問題?答:在編入代碼過程中,將cap.release()與cv2.destroyAllWindows()放入了while循環(huán)體內(nèi),所以一旦調(diào)用cap,隨即就cap,所以報出錯誤代碼。注:cap.release()與cv2.destroyAllWindows()只能放在while循環(huán)體外。TEL4890/488726UptechHarmonyCo.,使用OpenCv來進行圖像處理系統(tǒng)的組成進一步學(xué)習(xí)OpenCv操作系統(tǒng):Linux應(yīng)用工具:OpenCv、電腦顯示屏、電腦顯示器線、鍵盤、鼠標實驗原理:1.顏色空間轉(zhuǎn)換OpenCv中有數(shù)百種不同色彩空間轉(zhuǎn)換的方法。當(dāng)前最主要的,最常用的有三種顏色空間:灰度,BGR,HSV。UptechHarmonyCo.,使用OpenCv來進行圖像處理系統(tǒng)的組成進一步學(xué)習(xí)OpenCv操作系統(tǒng):Linux應(yīng)用工具:OpenCv、電腦顯示屏、電腦顯示器線、鍵盤、鼠標實驗原理:1.顏色空間轉(zhuǎn)換OpenCv中有數(shù)百種不同色彩空間轉(zhuǎn)換的方法。當(dāng)前最主要的,最常用的有三種顏色空間:灰度,BGR,HSV。灰度色彩空間是通過去除彩色信息來將其轉(zhuǎn)換為灰階,灰度色彩空間對中間處理特別有效,比如人臉檢測。BGR,即藍-綠-紅色彩空間,每一個像素點由一個三元數(shù)來表示,分別代表藍綠紅三種顏色HSV,H(Hue)是色調(diào),用角度度量,取值范圍為0°~360°,從紅色開始按逆時針方向計算,紅色0120°,HSV為240°,S(Saturation)是飽和度,V(Value)表示程度。下圖為TEL4890/488727UptechHarmonyCo.,2很多時候,圖像過于清晰,會導(dǎo)致像素點過多,緩慢,影響效率,下面介紹OpenCv是如何在保留最大信息的前提下縮放圖像的。3在OpenCv中,對圖像和的處理大多會涉及傅里葉變換,即一切波形都可以由一系列簡單且頻率不同的正弦曲線疊加得到。這個概念對圖像處理非常有幫助,這樣我們可以區(qū)分圖像哪些區(qū)域信號變化特別強,哪些沒那么強,從而可以任意標記噪聲區(qū)域,感區(qū)域等。高通濾波:檢測圖像某個區(qū)域,根據(jù)像素與周圍像素亮度差值來提升該亮度的濾波器低通濾波:在像素與周圍像素亮度差值小于特定值時,平滑亮度,用于去噪和模糊化。4在OpenCv中顏色識別是最基礎(chǔ),應(yīng)用最多的內(nèi)容,一般來講,在OpenCv中識別特定的顏色需要以下幾個步驟:1.2.3.UptechHarmonyCo.,2很多時候,圖像過于清晰,會導(dǎo)致像素點過多,緩慢,影響效率,下面介紹OpenCv是如何在保留最大信息的前提下縮放圖像的。3在OpenCv中,對圖像和的處理大多會涉及傅里葉變換,即一切波形都可以由一系列簡單且頻率不同的正弦曲線疊加得到。這個概念對圖像處理非常有幫助,這樣我們可以區(qū)分圖像哪些區(qū)域信號變化特別強,哪些沒那么強,從而可以任意標記噪聲區(qū)域,感區(qū)域等。高通濾波:檢測圖像某個區(qū)域,根據(jù)像素與周圍像素亮度差值來提升該亮度的濾波器低通濾波:在像素與周圍像素亮度差值小于特定值時,平滑亮度,用于去噪和模糊化。4在OpenCv中顏色識別是最基礎(chǔ),應(yīng)用最多的內(nèi)容,一般來講,在OpenCv中識別特定的顏色需要以下幾個步驟:.顏色空間轉(zhuǎn)換,將BGR轉(zhuǎn)化為HSV顏色空間,利用色調(diào)區(qū)別顏色按照閾值濾出所識別的顏色連續(xù)的開閉運算,消除噪點,平滑邊界提取連通域,提取出要識別的顏色(1)HSVHSV顏色空間的模型對應(yīng)于圓柱坐標系中的一個子集,圓錐的頂面對應(yīng)于V=1。它包括RGB模R=1,G=1,B=1HV0°,綠色對應(yīng)于角度120°,對應(yīng)于角度240°。在HSV顏色模型中,每一種顏色和它的補色相差180°。飽和度S取值從0到11HSVCTE這個模型中飽和度為百分之百的顏色,其純度一般小于百分之百。在圓錐的頂點(即原點)處,V=0,H和S無定義,代表黑色。圓錐的頂面中心處S=0,V=1,H無定義,代表白色。從該點到原點代表亮度漸暗的灰色,即具有不同于灰度的灰色。對于這些點,S=0,H的值無定義??梢哉f,HSV模型中的V軸對應(yīng)于RGB顏色空間中的主對角線。在圓錐面的圓角上的顏色,V=1,S=1,這種顏色是純色。HSV模型對應(yīng)于畫家配色的方法。畫家用改變色濃和色深的方法從某種純色獲得不同色調(diào)的顏色,在一種純色中加入白色以改變色濃,加入黑色以改變色深,同時加入不同比例的白色,黑色即可獲得各種不同的色調(diào)。HSV顏色空間可以用一個圓錐空間模型來描述。TEL4890/488728UptechHarmonyCo.,(2)腐蝕與膨脹腐蝕與膨脹又叫形態(tài)學(xué)操作。生輸出圖像。最基本的形態(tài)學(xué)操作有二:腐蝕與膨脹(ErosionDilation消除噪聲分割(isolate)的圖像元素,以及連接(join)相鄰的元素。尋找圖像中的明顯的極大值區(qū)域或極小值區(qū)域。提取連通域UptechHarmonyCo.,(2)腐蝕與膨脹腐蝕與膨脹又叫形態(tài)學(xué)操作。生輸出圖像。最基本的形態(tài)學(xué)操作有二:腐蝕與膨脹(ErosionDilation消除噪聲分割(isolate)的圖像元素,以及連接(join)相鄰的元素。尋找圖像中的明顯的極大值區(qū)域或極小值區(qū)域。提取連通域82484鄰接一共4個點,即上下左右,如下左圖所示。8鄰接的點一共有8個,包括了對角線位置的點,如下右圖所示。ABABABBCAC在視覺上看來,彼此連通的點形成了一個區(qū)域,而不連通的點形成了不同的區(qū)域。這樣的一個所有的點彼此連通點構(gòu)成的集合,我們稱為通區(qū)域。下面這符圖中,如果考慮4382個連通區(qū)域。(注:圖像是被放大的效果,圖像正方形實際只有4個像素)。TEL4890/488729UptechHarmonyCo.,提取連通域的算法非常復(fù)雜,這里不再贅述,OpenCv提供了函數(shù)findContours().實驗內(nèi)容:1.進入my_mcr_project文件夾,新建python文件cvt_color.py,Thonny打開輸入以下代碼:capcv2.whileTrue:Capture(0)ret,frame=cap.read()UptechHarmonyCo.,提取連通域的算法非常復(fù)雜,這里不再贅述,OpenCv提供了函數(shù)findContours().實驗內(nèi)容:1.進入my_mcr_project文件夾,新建python文件cvt_color.py,Thonny打開輸入以下代碼:capcv2.whileTrue:Capture(0)ret,frame=cap.read()#cv2.imshow('',frame)gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#cv2.imshow('gray',gray)hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)cv2.imshow('hsv',hsv)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()最主要的函數(shù)是cv2.cvtColor(),后面的參數(shù)決定了轉(zhuǎn)換方向。COLOR_BGR2GRAY:BGRCOLOR_BGR2HSV:BGRHSV第9行若檢測到按鍵‘q’,非???,如果設(shè)置太大,,應(yīng)為cv2.waitKey選擇恰當(dāng)?shù)臅r間,如果設(shè)置太小,25將11攝像頭12點擊綠色按鈕如下所示:TEL4890/488730UptechHarmonyCo.,可以看到灰度和hsv2.my_mcr_projectpythonscale_.py,Thonnyimportcv2importnumpyasnpcap=cv2.whileTrue:Capture(0)ret,frame=cap.read()cv2.imshow('UptechHarmonyCo.,可以看到灰度和hsv2.my_mcr_projectpythonscale_.py,Thonnyimportcv2importnumpyasnpcap=cv2.whileTrue:Capture(0)ret,frame=cap.read()cv2.imshow('',frame)x,y=frame.shape[0:2]small_frame=cv2.resize(frame,(int(y/2),int(x/2)))cv2.imshow('small',small_frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()ret,frame=cap.readret為True或者False,代表有沒有個參數(shù)frame到圖片,第二Cap.red()返回一個布爾值(True/False)。如果幀的是正確的,就是True。所以最后你可以通過檢查他的返回值來查看文件是否已經(jīng)到了結(jié)尾。有時cap可能不能成功的初始化攝像頭設(shè)備。這種情況下上面的代碼會報錯。你可以使用cap.isOpened(),來檢查是否成功初始化了。如果返回值是Truecap.open()。需要注意的是第7行,shape()函數(shù)返回一個列表,這個列表第一個元素是圖像寬度,第二個元素x,y8resize1/4cv2.imShow()函數(shù)可以在窗口中顯示圖像。該窗口和圖像的原始大小自適應(yīng)(自動調(diào)整到原始第一個參數(shù)是一個窗口名稱(也就是我們框的名稱),它是一個字符串類型。第二個參數(shù)是我們的圖像。您可以創(chuàng)建任意數(shù)量的窗口,但必須使用不同的窗口名稱。waitKey(1q’不TEL4890/488731UptechHarmonyCo.,會被,在這之后按鍵才會被,并在下一次進入if語段時起作用。也即經(jīng)過無效時間以后,檢測在上一次顯示圖像的時間段內(nèi)按鍵‘q’有沒有被按下,若無則跳出if語句段,捕獲并顯示下一幀圖像。若此參數(shù)置零,則代表在捕獲并顯示了一幀圖像之后,程序?qū)⑼A粼趇f語句段中一直等待‘q’被鍵入。cv2.waitKey(1)與0xFF(11111111)UptechHarmonyCo.,會被,在這之后按鍵才會被,并在下一次進入if語段時起作用。也即經(jīng)過無效時間以后,檢測在上一次顯示圖像的時間段內(nèi)按鍵‘q’有沒有被按下,若無則跳出if語句段,捕獲并顯示下一幀圖像。若此參數(shù)置零,則代表在捕獲并顯示了一幀圖像之后,程序?qū)⑼A粼趇f語句段中一直等待‘q’被鍵入。cv2.waitKey(1)與0xFF(11111111)cv2.waitKey(1)的返回值不止880。cap.release()和cv2.destroyAllWindows()是用來停止捕獲和關(guān)閉相應(yīng)的顯示窗口的??梢钥吹阶笊辖菫榭s小后的圖像。3.進入my_mcr_project文件夾,新建python文件filter.py,Thonny打開輸入以下代碼:importcv2importnumpyasnpcap=cv2.whileTrue:Capture(0)ret,frame=cap.read()#cv2.imshow('',frame)x,y=frame.shape[0:2]small_frame=cv2.resize(frame,(int(y/2),int(x/2)))cv2.imshow('small',small_frame)img_mean=cv2.blur(small_frame,(5,5))img_Guassian=cv2.GaussianBlur(small_frame,(5,5),0)img_median=cv2.medianBlur(small_frame,5)img_bilater=cv2.bilateralFilter(small_frame,9,75,75)cv2.imshow('mean',img_mean)cv2.imshow('guassian',img_Guassian)TEL4890/488732UptechHarmonyCo.,cv2.imshow('median',img_median)cv2.imshow('bilater',img_bilater)ifcv2.waitKey(1)&0xFFUptechHarmonyCo.,cv2.imshow('median',img_median)cv2.imshow('bilater',img_bilater)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()Blur:模糊濾波Median:中值濾波Bilater:雙邊濾波10111213cap.release()和cv2.destroyAllWindows()是用來停止捕獲和關(guān)閉相應(yīng)的顯示窗口的。點擊運行:可以看到幾種濾波效果如上圖所示。程序代碼:這里我們識別紅色和黃色組成的火焰,識別到著火以后,我們的智元素人快速帶領(lǐng)小朋友逃生。進入my_mcr_project文件夾,新建python文件fire_detect.py,Thonny打開輸入以下代碼:火焰識別importcv2importnumpyasnpTEL4890/488733UptechHarmonyCo.,cap=cv2.Capture(0)red_min=np.array([0,128,46])red_max=np.array([5,255,255])red2_min=red2_max=yellow_minyellow_maxnp.array([156,128,46])np.array([180,255,255])=np.array([15,128,46])=UptechHarmonyCo.,cap=cv2.Capture(0)red_min=np.array([0,128,46])red_max=np.array([5,255,255])red2_min=red2_max=yellow_minyellow_maxnp.array([156,128,46])np.array([180,255,255])=np.array([15,128,46])=np.array([50,255,255])whileTrue:ret,frame=cap.read()#cv2.imshow('',frame)x,y=frame.shape[0:2]small_frame=cv2.resize(frame,(int(y/2),int(x/2)))cv2.imshow('small',small_frame)srcreshsv===small_frame.copy()src.copy()cv2.cvtColor(src,cv2.COLOR_BGR2HSV)mask_red1=mask_red2=mask_yellowcv2.inRange(hsv,red_min,red_max)cv2.inRange(hsv,red2_min,red2_max)=cv2.inRange(hsv,yellow_min,yellow_max)mask=cv2.bitwise_or(mask_red1,mask_red2)mask=cv2.bitwise_or(mask,mask_yellow)res=cv2.bitwise_and(src,src,mask=mask)h,w=res.shape[:2]blured=cv2.blur(res,(5,5))ret,bright=cv2.threshold(blured,10,255,cv2.THRESH_BINARY)gray=kernelopenedclosedresult,cv2.cvtColor(bright,cv2.COLOR_BGR2GRAY)===cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))cv2.morphologyEx(gray,cv2.MORPH_OPEN,kernel)cv2.morphologyEx(opened,cv2.MORPH_CLOSE,kernel)contours,hierarchy =cv2.findContours(closed,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)cv2.drawContours(src,contours,-1,(255,0,0),2)cv2.imshow('result',src)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()cap=cv2.Capture(0):Capture()中參數(shù)是0,表示打開筆記本的內(nèi)置攝像頭,參數(shù)是視頻文件路徑則打開cap=cv2.Capture(“../test.avi”),ret,frame是獲cap.read()方法的兩個返回值。ret幀是正確的則返回True,如果文件到結(jié)尾,它的返回值就為False。TEL4890/488734UptechHarmonyCo.,frame就是每一幀的圖像,是個三維矩陣。5-10hsv14行縮放到原來的二分之一,輸出21hsv格式為(寬,高)22-27二值化,只提取出滿足閾值的像素點32行cv2.findContours()這個方法是用來找出輪廓值的:cv2.findContours找出輪廓值,UptechHarmonyCo.,frame就是每一幀的圖像,是個三維矩陣。5-10hsv14行縮放到原來的二分之一,輸出21hsv格式為(寬,高)22-27二值化,只提取出滿足閾值的像素點32行cv2.findContours()這個方法是用來找出輪廓值的:cv2.findContours找出輪廓值,cv2.RETR_EXTERNALcv2.drawCountours(img,contours,-1,(0,0,255),2)#畫出圖片中的輪廓值,也可以用來畫輪廓的近似值參數(shù)說明:img表示輸入的需要畫的圖片,表示顏色,2contours表示輪廓值,-1表示輪廓的索引,(0,0,255)32-3436行提取連通域,得到全部紅色黃間運行如下所示:可以看到提取出了火焰輪廓。思考題:1numpyarraypythonlist有什么區(qū)別?Python(list)中,元素本質(zhì)是對象。如:L=[1,2,3],需要3對于數(shù)值運算比較浪費內(nèi)存和CPU。因此,Numpy提供了ndarray(N-dimensionalarrayobject)對象:存儲單一數(shù)據(jù)類型的數(shù)組。TEL4890/488735UptechHarmonyCo.,2.彩色圖像、灰度圖像、二值圖像和索引圖像區(qū)別?答:彩色圖像:RGB圖像?;叶葓D像:0-255像素值。二值圖像:0和1,用于掩膜圖像。2563答:適應(yīng)圖像處理要求,消除圖像數(shù)字化時所混入的噪聲。提取對象的特征作為圖像識別的特征模式4答:對圖像做平滑或濾波后圖像變得更模糊5.UptechHarmonyCo.,2.彩色圖像、灰度圖像、二值圖像和索引圖像區(qū)別?答:彩色圖像:RGB圖像。灰度圖像:0-255像素值。二值圖像:0和1,用于掩膜圖像。2563答:適應(yīng)圖像處理要求,消除圖像數(shù)字化時所混入的噪聲。提取對象的特征作為圖像識別的特征模式4答:對圖像做平滑或濾波后圖像變得更模糊5.OpenCvRGB<->HSV答:RGB代表三原色Red,Green與Blue,強度可以由三分量的向量表示。HSV的HS代表深淺,當(dāng)S=0時只有灰度,VRGBHSVHSVRGBifs0R=G=B=VelseHi/=60;=INTEGER(H)fabc====HVVV-***i(((111---sss)*f)*(1-f))switch(i)case0:Rcase1:R==V;G=c;B=a;b;G=v;B=a;TEL4890/488736UptechHarmonyCo.,casecasecasecase2:3:4:5:RUptechHarmonyCo.,casecasecasecase2:3:4:5:RRRR====a;a;c;v;GGGG====v;b;a;a;BBBB====c;v;v;b;6cv2.morphologyEx()函數(shù)的原理?答:openvc中morphologyEx()函數(shù)是一種形態(tài)學(xué)變化函數(shù)。數(shù)學(xué)形態(tài)學(xué)可以理解為一種濾波行為,因此也稱為形態(tài)學(xué)濾波。濾波中用到的濾波器(kernal),在形態(tài)學(xué)中稱為結(jié)構(gòu)元素。結(jié)構(gòu)元素往往是由一個特殊的形狀構(gòu)成,如線條、矩形、圓等。TEL4890/488737UptechHarmonyCo.,OpenCv是怎樣檢測邊緣和輪廓的了解直線和形狀檢測背后的理論基礎(chǔ)操作系統(tǒng):樹莓派應(yīng)用工具:電腦顯示器、電腦顯示器線、鍵盤、鼠標、OpenCv、實驗原理:直線檢測首先介紹直線檢測,直線檢測可以通過UptechHarmonyCo.,OpenCv是怎樣檢測邊緣和輪廓的了解直線和形狀檢測背后的理論基礎(chǔ)操作系統(tǒng):樹莓派應(yīng)用工具:電腦顯示器、電腦顯示器線、鍵盤、鼠標、OpenCv、實驗原理:直線檢測首先介紹直線檢測,直線檢測可以通過HoughLines和HoughLinesP函數(shù)來完成,它們僅有的差別是:第一個函數(shù)使用標準Hough變換,第二個函數(shù)使用概率Hough變換。HoughlinesP函數(shù)之所以稱為概率版本的Hough變換是因為它只通過分析點的子集并估計這些點都屬于一條直線的概率,這是標準Hough變換的優(yōu)化版本。該函數(shù)計算代價少,執(zhí)行更快。圖形檢測OpenCv的HoughCircles函數(shù)可以用來檢測圓,它與使用HoughLines函數(shù)類似。像用來決定刪除或保留直線的兩個參數(shù)minLineLength和maxLineGap一樣,HoughCIrcles有一個圓心間最小距離和圓的最小及最大半徑。檢測其他形狀OpenCv中提供了approxPloyDP函數(shù)來檢測所有形狀,該函數(shù)提供多邊形近似,如果您要檢測的圖形cv2.findContourscv2.approxPloyDP實驗內(nèi)容:下面看一下實際操作:1.進入my_mcr_project文件夾,新建python文件line_detect.py,Thonny打開輸入以下代碼:importcv2importnumpyasnpTEL4890/488738UptechHarmonyCo.,cap=cv2.whileTrue:Capture(0)ret,frame=cap.read()x,y=frame.shape[0:2]small_frame=cv2.resize(frame,(int(y/2),int(x/2)))cv2.imshow('small',small_frame)gray=cv2.cvtColor(small_frame,cv2.COLOR_BGR2GRAY)edges=UptechHarmonyCo.,cap=cv2.whileTrue:Capture(0)ret,frame=cap.read()x,y=frame.shape[0:2]small_frame=cv2.resize(frame,(int(y/2),int(x/2)))cv2.imshow('small',small_frame)gray=cv2.cvtColor(small_frame,cv2.COLOR_BGR2GRAY)edges=cv2.Canny(gray,50,120)minLineLength=10maxLineGap=5lines=cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)iflines==Noneorlen(lines)==0:continueforx1,y1,x2,y2inlines[0]:cv2.line(small_frame,(x1,y1),(x2,y2),(0,255,0),2)cv2.imshow("lines",small_frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()while(){}語句,當(dāng)括號內(nèi)的內(nèi)容為真的時候,就執(zhí)行{}中的語句。所以當(dāng)while(true)出現(xiàn)的時候,就是表示程序一直執(zhí)行{}中的語句,因為while()中始終為“真”,ret,frame是獲cap.read()方法的兩個返回值。ret幀是正確的則返回True,如果文件到結(jié)尾,它的返回值就為False。frame就是每一幀的圖像,是個三維矩陣。先把圖像壓縮,轉(zhuǎn)化為灰度圖像,減小運算量9-10行:轉(zhuǎn)換顏色空間并作模糊處理cv2.line():給定一些端點在圖片上畫出線使用canny函數(shù)提取邊緣,這是一個非常復(fù)雜的算法,用于提取圖像的輪廓,主要有以下5個步驟:.5.在邊緣上使用非最大抑制在檢測到的邊緣上使閾值去除假陽性分析所有邊緣及其之間的連接,消除不明顯邊緣第13行:下面解釋以下HoughLinesP函數(shù)的幾個參數(shù):1:要處理的二值圖像2rhotheta1np.pi/1803:閾值,低于該閾值的會被忽略。參數(shù)4:最小直線長度:小于該長度會被忽略參數(shù)5:最大線段間隙:大于此間隙才被認為是兩條直線運行程序:TEL4890/488739UptechHarmonyCo.,可以看到識別出了圖中直線。2.進入my_mcr_project文件夾,新建python文件circle_detect.py,Thonny打開輸入以下代碼:圖形識別importcv2UptechHarmonyCo.,可以看到識別出了圖中直線。2.進入my_mcr_project文件夾,新建python文件circle_detect.py,Thonny打開輸入以下代碼:圖形識別importcv2importnumpyasnpcap=cv2.whileTrue:Capture(0)ret,frame=cap.read()x,y=frame.shape[0:2]small_frame=cv2.resize(frame,(int(y/2),int(x/2)))cv2.imshow('small',small_frame)gray=cv2.cvtColor(small_frame,cv2.COLOR_BGR2GRAY)gray_img=cv2.medianBlur(gray,5)cimg=cv2.cvtColor(gray_img,cv2.COLOR_GRAY2BGR)circles=cv2.HoughCircles(gray_img,cv2.HOUGH_GRADIENT,1,120,param1=100,param2=30,minRadius=0,maxRadius=0)circles=np.uint16(np.around(circles))foriincircles[0,:]:cv2.circle(small_frame,(i[0],i[1]),i[2],(0,255,0),2)cv2.circle(small_frame,(i[0],i[1]),2,(0,0,255),3)cv2.imshow("circles",small_frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()TEL4890/488740UptechHarmonyCo.,cv2.destroyAllWindows()運行結(jié)果:retframecap.read()返回值含義:ret為True或者False,代表有沒有第二個參數(shù)frame表示截取到一幀的圖片到圖片UptechHarmonyCo.,cv2.destroyAllWindows()運行結(jié)果:retframecap.read()返回值含義:ret為True或者False,代表有沒有第二個參數(shù)frame表示截取到一幀的圖片到圖片6-8行將圖片高和寬分別賦值給x,y??s放到原來的二分之一,輸出9-10行轉(zhuǎn)換顏色空間并作模糊處理,灰度處理11行灰度圖像轉(zhuǎn)彩色圖像格式為(寬,高)12行圓檢測,HoughLinesP函數(shù)是概率直線檢測,注意區(qū)分HoughLines函數(shù)13np.around返回四舍五入后的值,可指定精度。行勾畫圓形,planets圖像、(i[0],i[1])圓心坐標,i[2]是半徑行勾畫圓心,圓心實質(zhì)也是一個半徑為2的圓形思考題:1.cv2.imreadcv2.cvtColor()如何使用?cv2.imread()接口讀圖像,讀進來直接是BGR格式數(shù)據(jù)格式在0~255需要特別注意的是圖片讀出來的格式是BGR,不是我們最常見的RGB格式,顏色肯定有區(qū)別。cv2.cvtColor(p1,p2)是顏色空間轉(zhuǎn)換函數(shù),p1是需要轉(zhuǎn)換的圖片,p2是轉(zhuǎn)換成何種格式。cv2.COLOR_BGR2RGBBGRRGBcv2.COLOR_BGR2GRAY將BGR2.Hough答:Hough變換的基本原理在于,利用點與線的對偶性,將圖像空間的線條變?yōu)閰?shù)空間的點,從而檢測給定圖像是否存在給定性質(zhì)的曲線。圓的方程為:(x-a)^2+(y-2)^2=r^2,通過Hough變換,將圖像空間對應(yīng)到參數(shù)空間。3HoughLinesHoughLinesP()函數(shù)的原理答:HoughLines()函數(shù)詳解:此函數(shù)可以找出采用標準霍夫變換的二值圖像線條。在OpenCv中,我們可SHTMSHTOpenCvHoughLinesP()函數(shù)詳解:此函數(shù)在HoughLines的基礎(chǔ)上末尾加了一個代表Probabilistic(概率)TEL4890/488741UptechHarmonyCo.,的P,表明它可以采用累計概率霍夫變換(PPHT)來找出二值圖像中的直線。4參數(shù)InputArrayUptechHarmonyCo.,的P,表明它可以采用累計概率霍夫變換(PPHT)來找出二值圖像中的直線。4參數(shù)InputArrayMatOutputArrayMat參數(shù)Size表示卷積和大小,此參數(shù)決定模糊程度,Size(x,y)中x,y取值越大表現(xiàn)模糊程度越深,x,y參數(shù)SigmaXx參數(shù)SigmaYy最后一個參數(shù)表示對邊緣的處理方法,一般取默認值使用方法:Size(x,y)中x,y取正奇數(shù),SigmaX,SigmaY取0,此時SigmaX,SigmaY會自動計算,公式sigma=((n-1)*0.5-1)*0.3+0.8,xy5.pythonNone答:python函數(shù)參數(shù)為None的時候,比如defreq(self,b=None),是因為這個函數(shù)是一個封裝函數(shù),在沒有調(diào)用他的時候他的參數(shù)需要加上None。如果不加None值,不調(diào)用函數(shù)他會報錯。一般會用在封裝類或者框架里。比如說框架一般會有一個總的調(diào)用函數(shù),總的調(diào)用函數(shù)啟動,這次沒有獲取到值,執(zhí)行到req函數(shù)時無法給rqrqre()mising1reqiredpositionalargument:'bNone報錯。如果程序執(zhí)行到req參數(shù)傳遞成功的話,參數(shù)就None了。所以None6.OpenCvcvCircle答:cvCircle是指繪制圓形的一個程序函數(shù)。定義:voidcvCircleCvArr*imgCvPointcenterintradiusCvScalarcolorintthickness=1,intline_type=8intshift=0參數(shù):imgcenter圓心坐標radiuscolorthickness如果是正數(shù),表示組成圓的線條的粗細程度。否則,表示圓是否被填充line_type線條的類型。見cvLineshiftTEL4890/488742UptechHarmonyCo.,六、人臉識別1.2.3.掌握人臉識別的的流程掌握人臉的方法掌握OpenCv各項功能和實現(xiàn)的方法操作系統(tǒng):ubutun應(yīng)用工具:電腦顯示屏、鍵盤、鼠標、電腦顯示器線、OpenCv實驗原理:(1)系統(tǒng)需求分析在現(xiàn)實生活中,人臉識別用于各行各業(yè)(安保到Haar領(lǐng)域),OpenCvUptechHarmonyCo.,六、人臉識別1.2.3.掌握人臉識別的的流程掌握人臉的方法掌握OpenCv各項功能和實現(xiàn)的方法操作系統(tǒng):ubutun應(yīng)用工具:電腦顯
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《網(wǎng)店色彩設(shè)計》課件
- 《神經(jīng)癥年制》課件
- 《證券上市》課件
- 2024年農(nóng)業(yè)部門抗旱工作總結(jié)范文
- 2025年高考數(shù)學(xué)一輪復(fù)習(xí)之冪函數(shù)、指數(shù)函數(shù)、對數(shù)函數(shù)
- 單位管理制度匯編大全人力資源管理
- 單位管理制度合并匯編【人事管理】
- 單位管理制度分享合集人員管理十篇
- 單位管理制度范例匯編人事管理
- 單位管理制度呈現(xiàn)大全人事管理十篇
- 期末模擬卷 2024-2025學(xué)年人教版數(shù)學(xué)六年級上冊(含答案)
- GB/T 44351-2024退化林修復(fù)技術(shù)規(guī)程
- 《比特幣完整介紹》課件
- 江蘇省2023年生物小高考試題含答案解析
- 2019年同等學(xué)力(教育學(xué))真題精選
- [轉(zhuǎn)載]鄭桂華《安塞腰鼓》教學(xué)實錄
- 泵管清洗專項方案
- 門診手術(shù)室上墻職責(zé)、制度(共6頁)
- 邊坡土壓力計算(主動土壓力法)
- 鉆孔壓水試驗計算EXCEL表格
- 機電安裝項目施工組織計劃方案
評論
0/150
提交評論