版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 本科生畢業(yè)論文(設(shè)計(jì))</p><p> 題目:基于python開(kāi)發(fā)的圖像 </p><p> 采集器之Airppt </p><p><b> 學(xué) 部 </b></p><p><b> 學(xué)科門(mén)類 </b></p><p>
2、<b> 專 業(yè)</b></p><p> 基于python開(kāi)發(fā)的圖像采集器之Airppt</p><p><b> 摘 要</b></p><p> 本文設(shè)計(jì)了一個(gè)基于python開(kāi)發(fā)的圖像采集器,該設(shè)計(jì)通過(guò)普通的USB數(shù)字?jǐn)z像頭來(lái)捕捉和獲取實(shí)時(shí)圖像,利用linux系統(tǒng)下的python腳本中的Opencv
3、圖像處理模塊和Huigui攝像頭識(shí)別模塊實(shí)現(xiàn)了采集圖像信息并對(duì)圖像信息進(jìn)行分析的功能,該設(shè)計(jì)具有可靠性高、靈活穩(wěn)定、低成本的特點(diǎn),基于python開(kāi)發(fā)的圖像采集器將采集到的數(shù)據(jù)輸入到python腳本進(jìn)行分析處理,并從外部引入C編程,根據(jù)不同的處理結(jié)果,系統(tǒng)將會(huì)調(diào)用不同的C程序,從而實(shí)現(xiàn)對(duì)ppt的翻頁(yè)。本文系統(tǒng)介紹了用python開(kāi)發(fā)的圖像采集器基本滿足設(shè)計(jì)要求。</p><p> 關(guān)鍵詞:圖像采集器;Pytho
4、n語(yǔ)言;Python C擴(kuò)展;混合語(yǔ)言編程</p><p> Development the image acquisition based on python</p><p><b> ABSTRACT</b></p><p> Design one based on python development of image captur
5、e device, the design by ordinary USB digital camera head to capture and access to real-time image using python script in linux system Opencv image processing module and Huigui camera head identification module to achieve
6、 the capture image informationand image information analysis function, the design has high reliability, flexible and stable, low-cost, will be collected based on the the python development of image acquisition data input
7、 to a </p><p> Key words:Image acquisition;Python;Python C extension;Mixed-language programming</p><p><b> 目 錄</b></p><p> 1 前言錯(cuò)誤!未定義書(shū)簽。</p><p> 2 Pyt
8、hon語(yǔ)言介紹3</p><p> 2.1 Python語(yǔ)言簡(jiǎn)介3</p><p> 2 Python語(yǔ)言特性 4</p><p> 3 設(shè)計(jì)思路和編程5</p><p> 3.1 設(shè)計(jì)思路 5</p><p> 3.2 設(shè)計(jì)流程圖 5</p><p><b>
9、 3.3 編程 6</b></p><p> 3.3.1 Opencv模塊引用 6</p><p> 3.3.2 Highgui模塊引用 6</p><p> 3.3.3 Image模塊引用 6 </p><p> 3.3.4 Os模塊引用 6</p><p> 3.4 python與C
10、混合編程接口問(wèn)題 6 </p><p> 4 功能和可行性分析9</p><p><b> 5 結(jié)論 11</b></p><p><b> 參考文獻(xiàn)12</b></p><p><b> 致謝 13</b></p><p><
11、b> 附錄14</b></p><p><b> 1 引 言</b></p><p> 信息和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展, 使得圖像信息量激增,人們對(duì)檢索圖像信息的需求也日益增加。作為一種純面向?qū)ο蟮膭?dòng)態(tài)腳本語(yǔ)言, python 已經(jīng)在網(wǎng)絡(luò)應(yīng)用軟件、系統(tǒng)配置軟件及科學(xué)研究領(lǐng)域獲得了廣泛的使用,因此本文介紹了一種基于Python的利用Linux平臺(tái)下P
12、ython與C++/C++語(yǔ)言的兩種Os.systeam接口, 實(shí)現(xiàn)了python與VC的混合語(yǔ)言編程,并將這種軟件結(jié)構(gòu)應(yīng)用于一套圖像采集器系統(tǒng)。實(shí)際應(yīng)用表明, 這種結(jié)構(gòu)可以充分發(fā)揮Python編程的靈活簡(jiǎn)單和VC執(zhí)行效率高的優(yōu)點(diǎn), 克服Python執(zhí)行效率低和VC開(kāi)發(fā)效率低的缺點(diǎn),實(shí)現(xiàn)了軟件開(kāi)發(fā)效率和執(zhí)行效率的雙贏。</p><p> 當(dāng)今社會(huì),科技發(fā)達(dá)成長(zhǎng)了人們的懶惰性,利用各種機(jī)器設(shè)備做家務(wù),利用遠(yuǎn)程監(jiān)控
13、來(lái)遙控遠(yuǎn)在千里之外的東西,總之一切事務(wù)趨于自動(dòng)化。圖像采集器(Image acquisition),是指通過(guò)攝像頭采集圖像信息,批量獲取圖像信息,能夠根據(jù)圖像信息獲取到物體運(yùn)動(dòng)的位移和執(zhí)行的動(dòng)作,這樣采集到的圖像信息分析更加的準(zhǔn)確,可靠性更強(qiáng)。本文設(shè)計(jì)了一種不用點(diǎn)擊鼠標(biāo),不用按下鍵盤(pán),只需要輕輕的揮揮手就可以操縱PPT的翻頁(yè)的軟件--Airppt, 解決了以往操作PPT的繁瑣性,滿足了人們對(duì)方便快捷生活的向往,并且提升了宣講效率。有了a
14、irppt,老師上課講課就不用總在電腦旁用鼠標(biāo)控制ppt,這樣就加大了老師與學(xué)生的互動(dòng)性。</p><p> Airppt利用的原理就是圖像采集器,它在國(guó)內(nèi)外應(yīng)用廣泛,并且發(fā)展迅速,在國(guó)外它應(yīng)用于軍事,醫(yī)療,監(jiān)控等領(lǐng)域。在國(guó)內(nèi)還沒(méi)有太多的應(yīng)用,據(jù)目前了解到的在國(guó)內(nèi)一般應(yīng)用于監(jiān)控的比較多,還有運(yùn)用于娛樂(lè)的,通過(guò)采集器將用戶的身形采集到屏幕中并且可以采集到你的動(dòng)作與里面的事物發(fā)生互動(dòng)。</p><
15、;p> 本文通過(guò)對(duì)模塊應(yīng)用環(huán)境及功能的認(rèn)證,確定了應(yīng)用opencv模塊處理圖像,huigui模塊來(lái)識(shí)別并調(diào)用攝像頭采集信息,image模塊處理采集到的圖像大小等,os模塊引入外部C擴(kuò)展,在利用python代碼將這些功能連接起來(lái),最終實(shí)現(xiàn)了airppt的相關(guān)協(xié)議所設(shè)定的功能。</p><p> 本文主要研究?jī)?nèi)容如下:</p><p> opencv模塊的安裝調(diào)用及作用;</
16、p><p> Image模塊的用法安裝;</p><p> Huigui模塊的用法及調(diào)用;</p><p> Python外部C擴(kuò)展的引入;</p><p> 本設(shè)計(jì)采用python程序編寫(xiě),硬件只需一個(gè)外置攝像頭作為采集信息的工具。</p><p> 2 Python語(yǔ)言介紹</p><
17、p> 2.1 Python語(yǔ)言簡(jiǎn)介</p><p> Python是一種解釋型、交互式、純面向?qū)ο蟮哪_本程序設(shè)計(jì)語(yǔ)言,它結(jié)合了多種不同語(yǔ)言最經(jīng)典的設(shè)計(jì)原則和思想。自1990年Guido van Rossum 發(fā)明Python以來(lái),它的簡(jiǎn)單、清晰和優(yōu)雅吸引了廣泛的關(guān)注,Python 社區(qū)以每?jī)赡攴乃俣妊杆贁U(kuò)張。例如:Python自google創(chuàng)建之初就是其主要網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)工具;美國(guó)國(guó)家航空航天局使用
18、Python開(kāi)發(fā)CAD/CAE/PDM資源庫(kù), 在此基礎(chǔ)上建設(shè)新一代協(xié)作式工程環(huán)境NGCEE(Next Generation Collaborative Engineering Environment);美國(guó)國(guó)家研究推進(jìn)機(jī)構(gòu)CNRI(Corporation for National Research Initiatives )1999年啟動(dòng)的Computer Programming for Everybody(C4PE)計(jì)劃將Pytho
19、n作為未來(lái)程序設(shè)計(jì)語(yǔ)言向教育機(jī)構(gòu)推廣; Microsoft于2005年推出Iron Python 的開(kāi)源項(xiàng)目, 在Visual Studio 2005 中接納Python語(yǔ)言作為唯一動(dòng)態(tài)腳本語(yǔ)言開(kāi)發(fā).net應(yīng)用</p><p> 2.2 Python語(yǔ)言特性</p><p> 相比其他任何程序設(shè)計(jì)語(yǔ)言, Python允許軟件設(shè)計(jì)者更關(guān)注于問(wèn)題本身而不是實(shí)現(xiàn)細(xì)節(jié), 其主要特性有:<
20、;/p><p> (l) 面向?qū)ο?Python 是一種純面向?qū)ο笳Z(yǔ)言, 支持面向?qū)ο蟮乃袡C(jī)制, 這使它可以應(yīng)用于大型軟件項(xiàng)目開(kāi)發(fā)。</p><p> (2) 虛擬機(jī)機(jī)制 Python代碼編譯為字節(jié)碼在虛擬機(jī)上執(zhí)行,這種類似Java的機(jī)制使Python具有平臺(tái)無(wú)關(guān)性, 并獲得比其他腳本語(yǔ)言更快的執(zhí)行效率。</p><p> (3) 內(nèi)置高級(jí)數(shù)據(jù)類型
21、 Python中的元組、列表、數(shù)組、字典等高級(jí)數(shù)據(jù)類型具有極強(qiáng)的表達(dá)能力, 幾乎任意復(fù)雜的對(duì)象在Python中均可以以最簡(jiǎn)單的方式進(jìn)行描述。</p><p> (4) 交互式開(kāi)發(fā)方式和單元測(cè)試 類似Foxpro 和 Matlab ,Python 提供了內(nèi)置交互式窗口, 可以允許開(kāi)發(fā)者邊嘗試邊書(shū)寫(xiě)代碼, 極大地提高了軟件開(kāi)發(fā)效率。另外單元測(cè)試機(jī)制在每個(gè)類代碼完成后均可以單獨(dú)執(zhí)行、測(cè)試。這兩種開(kāi)發(fā)方式使得”搭積
22、木” 式的軟件開(kāi)發(fā)過(guò)程成為現(xiàn)實(shí)。</p><p> (5) 動(dòng)態(tài)執(zhí)行特性 類似早期Dbase系統(tǒng)的宏代替、Python允許動(dòng)態(tài)構(gòu)造程序代碼并執(zhí)行, 使得軟件中的重復(fù)代碼得到簡(jiǎn)化。</p><p> (6) 高度可擴(kuò)展性Python 語(yǔ)言本身只實(shí)現(xiàn)了一個(gè)小內(nèi)核,其強(qiáng)大功能體現(xiàn)在大量的擴(kuò)展模塊。計(jì)算機(jī)科學(xué)領(lǐng)域幾乎所有的已知算法均可找到Python語(yǔ)言擴(kuò)展。不僅c / c + + 編寫(xiě)的
23、程序可以方便地改寫(xiě)成Python擴(kuò)展模塊,而且Python自身也可以被嵌人到口C/C++項(xiàng)目中。</p><p> (7) 平臺(tái)無(wú)關(guān)性Python字節(jié)碼可以不經(jīng)修改跨平臺(tái)運(yùn)行在所有主流操作系統(tǒng)上, 甚至包括Pocket PC 、Palm等嵌入式系統(tǒng)[1]。 </p><p> 3 設(shè)計(jì)思路和編程</p><p> 3.1 設(shè)計(jì)思路</p
24、><p><b> 本文的設(shè)計(jì)思路是:</b></p><p> ?。?).編輯器的選擇:python固定的編輯器是vim編輯器,這個(gè)編輯器很容易實(shí)現(xiàn)腳本的創(chuàng)建保存和運(yùn)行,能大大提高程序員的編程速度,它還有一個(gè)非常強(qiáng)大的功能,在電腦發(fā)生意外突然關(guān)機(jī)的情況下,這個(gè)編輯器就會(huì)自動(dòng)保存你之前你沒(méi)有保存的程序。這樣就不會(huì)丟失有用的信息</p><p>
25、?。?).圖像坐標(biāo)的產(chǎn)生:設(shè)計(jì)中采用的是判斷紅點(diǎn)的個(gè)數(shù),紅點(diǎn)指定義的一個(gè)紅色RGB色調(diào),當(dāng)我們動(dòng)作時(shí)就會(huì)采集到紅點(diǎn)動(dòng)作的個(gè)數(shù),通過(guò)判斷紅點(diǎn)的個(gè)數(shù),來(lái)判斷鼠標(biāo)是否要?jiǎng)幼?,通過(guò)動(dòng)作的位移來(lái)判斷鼠標(biāo)動(dòng)作的方向。</p><p> ?。?).圖像的處理:圖像的處理是用Image模塊處理的,可改變圖像的大小,像素等,這樣就可以把采集到的圖像信息處理成所需要的。</p><p> (4).攝像頭接口
26、的處理:這里用的是Opencv模塊來(lái)實(shí)現(xiàn)圖像的坐標(biāo)的采集,opencv的設(shè)計(jì)意圖是為用戶提供簡(jiǎn)單易用的圖形用戶接口。</p><p> ?。?).動(dòng)作的反饋:當(dāng)你用手在攝像頭前揮動(dòng)時(shí),該動(dòng)作就會(huì)被程序所識(shí)別,然后發(fā)出相應(yīng)的相應(yīng)。</p><p> (6).功能的設(shè)定:這些功能是由C語(yǔ)言寫(xiě)的,然后引入os模塊,通過(guò)os模塊將寫(xiě)好的C功能引入到腳本語(yǔ)言中去。然后再用判斷語(yǔ)句,當(dāng)程序符合哪種條
27、件是就會(huì)執(zhí)行哪些C功能。</p><p><b> 2軟件編程思想</b></p><p> 本文的軟件編程思想是:攝像頭要采集手指運(yùn)動(dòng)的圖像,來(lái)判斷執(zhí)行什么樣的動(dòng)作,那么攝像頭怎么樣才能識(shí)別你的手指呢?本文在這里是用顏色(R,G,B)來(lái)解決的,本設(shè)計(jì)把手指用(R,G,B)定義成紅點(diǎn),現(xiàn)在紅點(diǎn)就代表手指,應(yīng)用指令控制攝像頭來(lái)采集紅點(diǎn)。這是本設(shè)計(jì)的第一步打算。<
28、;/p><p> 第二步,需要采集的目標(biāo)已經(jīng)確定,接下來(lái)就是判斷紅點(diǎn)的運(yùn)動(dòng)方向和位移,我這里是通過(guò)判斷紅點(diǎn)運(yùn)動(dòng)的方向來(lái)確定對(duì)airppt執(zhí)行什么樣的動(dòng)作;通過(guò)紅點(diǎn)的位移和個(gè)數(shù)來(lái)確定airppt是否要執(zhí)行該動(dòng)作,本設(shè)計(jì)在這里定義的是位移大于70mm,紅點(diǎn)個(gè)數(shù)大于20個(gè)時(shí)airppt才會(huì)執(zhí)行相應(yīng)的動(dòng)作。因?yàn)閯?dòng)畫(huà)都是由一張張圖片組成的,假如不判斷位移,當(dāng)你不動(dòng)作時(shí)它也會(huì)自動(dòng)采集紅點(diǎn),進(jìn)而發(fā)生動(dòng)作反應(yīng),這樣就出錯(cuò)了。這里的
29、中心思想就是if判斷語(yǔ)句,事件處理系統(tǒng)和for循環(huán)語(yǔ)句。</p><p> 3.2 設(shè)計(jì)流程圖</p><p> 本文定義的參照物是一個(gè)用代碼編寫(xiě)的RGB紅點(diǎn)。并且分析每張圖片的紅點(diǎn)數(shù),當(dāng)紅點(diǎn)數(shù)達(dá)到70個(gè)時(shí)將該圖片列為有效圖片,否則無(wú)效。</p><p> 圖 3-1 設(shè)計(jì)全局架構(gòu)結(jié)構(gòu)圖</p><p> 圖3-1是本設(shè)計(jì)的全局
30、架構(gòu)結(jié)構(gòu)圖,是本設(shè)計(jì)得以實(shí)現(xiàn)的最重要部分,對(duì)獲取到的圖片分析是否有效,接下來(lái)則是細(xì)節(jié)部分,分析兩張最近的有效圖片中心點(diǎn)位置來(lái)判斷左翻頁(yè)還是右翻頁(yè)還是不翻頁(yè)。</p><p> 圖3-2 有效圖片篩選架構(gòu)圖 </p><p> 圖3-2實(shí)現(xiàn)的是對(duì)有效圖片進(jìn)行分析,通過(guò)判斷最近兩張有效圖片的中心位置點(diǎn)的位置關(guān)系來(lái)決定ppt
31、是否執(zhí)行動(dòng)作,執(zhí)行動(dòng)作時(shí)是左翻頁(yè)還是右翻頁(yè)等一系列功能。完成這一步所需的程序如下:</p><p> if len(list2)>20: #如果列表中坐標(biāo)個(gè)數(shù)大于20個(gè)</p><p> if len(list2) > 20:</p><p> tn3=list2[-1][0]-list2[0][0]
32、 #將橫坐標(biāo)的長(zhǎng)度賦值給tn3 </p><p> tn4=list2[-1][1]-list2[0][1] #將縱坐標(biāo)的長(zhǎng)度賦值給tn4</p><p> while len(list2)>3: #</p><p> list2.pop(0)</p><p> #print '.
33、.........................',tn3</p><p> #print tn4</p><p> if tn4>50 and tn3>-50 and tn3<50:</p><p> os.system('./a.x 71')</p><p> if tn4<-50
34、 and tn3>-50 and tn3<50:</p><p> os.system('./a.x 9')</p><p> if tn3<-100:</p><p> os.system('./a.x 114')</p><p> #print '[right]'&
35、lt;/p><p> #time.sleep(0.8)</p><p> if tn3>100:</p><p> os.system('./a.x 113')</p><p> #print '[left]'</p><p> #time.sleep(0.8)</p&
36、gt;<p> 每次判斷完一張圖片后,就把列表中的紅點(diǎn)數(shù)目與坐標(biāo)等都刪除。這樣就不會(huì)對(duì)下一張圖片造成影響。</p><p><b> 3.3 編程</b></p><p> 在開(kāi)始編程之前要先確定編程工具,本設(shè)計(jì)用的是vim編輯器。這個(gè)編輯器的最大優(yōu)勢(shì)就是,在意外情況下可以自動(dòng)保存代碼。當(dāng)代碼錯(cuò)誤時(shí),會(huì)提示錯(cuò)誤信息,能夠及時(shí)進(jìn)行修改。以下是本設(shè)
37、計(jì)的部分代碼:</p><p> #!/usr/bin/python</p><p> 這是解釋python語(yǔ)言在電腦中的位置</p><p> #-*- coding: UTF-8 -*-</p><p> 這是python腳本中的中文解釋器</p><p> 3.3.1 opencv模塊</p>
38、;<p> import opencv</p><p> 從外部引入opencv模塊</p><p> 本設(shè)計(jì)用到的opencv代碼如下:</p><p> cam=highgui.cvCreateCameraCapture(0) #定義攝像頭端口位置</p><p> tn1=opencv.adaptors.Ip
39、l2PIL(im) #采集到的圖像定義為tn1</p><p> OpenCV的全稱是Open Source Computer Vision Library,是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺(jué)庫(kù)。OpenCV是由英特爾公司發(fā)起并參與開(kāi)發(fā),以BSD許可證授權(quán)發(fā)行,可以在商業(yè)和研究領(lǐng)域中免費(fèi)使用。OpenCV可用于開(kāi)發(fā)對(duì)實(shí)時(shí)的圖像處理、計(jì)算機(jī)視覺(jué)以及模式識(shí)別程序。OpenCV用C++語(yǔ)言編寫(xiě),它的主要接口也是C++語(yǔ)
40、言,但是依然保留了大量的C語(yǔ)言接口。該庫(kù)也有大量的Python, Java and MATLAB/OCTAVE的接口。這些語(yǔ)言的API接口函數(shù)可以通過(guò)在線文檔獲得?,F(xiàn)在也提供對(duì)于C#,Ch,Ruby的支持。</p><p> 安裝Opencv所需的依賴工具:cmake, gtk+*, ffmpeg*, gstreamer*編譯安裝:</p><p> $ cd $DIR</
41、p><p> $ mkdir release</p><p> $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ..</p><p> $ make -j$ make install</p><p
42、> 3.3.2 highgui模塊</p><p> from opencv import highgui</p><p> 從opencv圖形處理模塊中引入highgui模塊。HighHGUI只是用來(lái)建立快速軟件原形或是試驗(yàn)用的。它的設(shè)計(jì)意圖是為用戶提供簡(jiǎn)單易用的圖形用戶接口。</p><p> 本設(shè)計(jì)用到的highgui模塊如下:</p>
43、;<p> im=highgui.cvQueryFrame(cam);這里highgui用來(lái)采集圖像</p><p> OpenCV為了用于生產(chǎn)級(jí)別的應(yīng)用而設(shè)計(jì)的。HighHGUI只是用來(lái)建立快速軟件原形或是試驗(yàn)用的。它的設(shè)計(jì)意圖是為用戶提供簡(jiǎn)單易用的圖形用戶接口。通常,你需要讀入源圖像到你的程序或者輸出結(jié)果圖像到磁盤(pán)。此外,需要用簡(jiǎn)單的方法顯示圖像到監(jiān)視器并且向用戶提供輸入.如果你試圖創(chuàng)建最終
44、用戶的應(yīng)用,請(qǐng)不要使用HighGUI 。 相對(duì)來(lái)說(shuō),應(yīng)當(dāng)為你的目標(biāo)系統(tǒng)參考特定的函數(shù)庫(kù)。比如:HighGUI中的攝像頭輸入方法(cvCreateCameraCapture)是為了易用而設(shè)計(jì)的。然而,并不意味著它能夠?qū)岵灏巫鞒龇磻?yīng)等等[2]。</p><p> 3.3.3 image模塊</p><p> import Image</p><p> 引入圖像模
45、塊,對(duì)采集到的圖像進(jìn)行處理</p><p> 本設(shè)計(jì)用到的image模塊代碼:</p><p> tn1=tn1.resize((160,160)) #重新設(shè)置采集到的圖像的大小</p><p> size1=tn1.size #將重新設(shè)置的圖像的大小值定義位size1</p><p
46、> pbb=tn1.load() #載入圖像 </p><p> PythonWare公司提供了免費(fèi)的圖像處理工具包PIL(Python Image Library),該軟件包提供了基本的圖像處理功能,如:改變圖像大小,旋轉(zhuǎn)圖像,圖像格式轉(zhuǎn)換,色場(chǎng)空間轉(zhuǎn)換,圖像增強(qiáng),直方圖處理,插值和濾波等 等。雖然在這個(gè)軟件包上要實(shí)現(xiàn)類似MATLAB中的復(fù)雜的圖像處理
47、算法并不太適合,但是Python的快速開(kāi)發(fā)能力以及面向?qū)ο蟮鹊戎T多特點(diǎn)使得它非常適 合用來(lái)進(jìn)行原型開(kāi)發(fā)。在PIL中,任何一副圖像都是用一個(gè)Image對(duì)象表示,而這個(gè)類由和它同名的模塊導(dǎo)出,因此,要加載一副圖像,最簡(jiǎn)單的形式是這樣的:import Image</p><p> img = Image.open(“dip.jpg”)</p><p> 注意:第一行的Image是模塊名;第二
48、行的img是一個(gè)Image對(duì)象; Image類是在Image模塊中定義的。關(guān)于Image模塊和Image類,切記不要混淆了?,F(xiàn)在,我們就可以對(duì)img進(jìn)行各種操作了,所有對(duì)img的 操作最終都會(huì)反映到到dip.img圖像上。這個(gè)模塊提供了一個(gè)常用的圖像增強(qiáng)工具箱。可以用來(lái)進(jìn)行色彩增強(qiáng)、圖像疊加、改變圖像大小、亮度增強(qiáng)、對(duì)比度增強(qiáng)、圖像尖銳化等等增強(qiáng)操作。所有操作都有相同形式的接口——通過(guò)相 應(yīng)類的enhance方法實(shí)現(xiàn):色彩增強(qiáng)通過(guò)Col
49、or類的enhance方法實(shí)現(xiàn);亮度增強(qiáng)通過(guò)Brightness類的enhance方法實(shí)現(xiàn);對(duì)比度增強(qiáng)通過(guò)Contrast類的enhance方法實(shí)現(xiàn);尖銳化通過(guò)Sharpness類的enhance方法實(shí)現(xiàn)。所有的操作都需要向類的構(gòu)造函數(shù)傳遞 一個(gè)Image對(duì)象作為參數(shù),這個(gè)參數(shù)定義了增強(qiáng)作用的對(duì)象。同時(shí)所有的操作都返回一個(gè)新的Image對(duì)象。如果傳給enhance方法的參數(shù)是1.0, 則不對(duì)原圖像做任何改變,直接返回原圖像的一個(gè)拷貝。&
50、lt;/p><p><b> 3.34 os模塊</b></p><p><b> import os</b></p><p> 引入os模塊,os模塊提供了一個(gè)統(tǒng)一的操作系統(tǒng)接口函數(shù)</p><p> 本設(shè)計(jì)引用os模塊所實(shí)現(xiàn)的代碼如下:</p><p> os.sy
51、stem('./fake-mouse-move.x 0 ' + str(m) + ' ' + str(n))#引入用C語(yǔ)言編寫(xiě)的程序</p><p> Python C 擴(kuò)展 </p><p> 一個(gè)C 源程序中的算法開(kāi)發(fā)測(cè)試完畢后,可以改寫(xiě)為python C 擴(kuò)展暴露給Python程序使用。例如將C源程序中的foo函數(shù)轉(zhuǎn)換為python語(yǔ)言的擴(kuò)展, 需
52、要以下步驟:</p><p> (l) 包含python.h 的頭文件, 連接pythonXX.lib(XX 是python版本號(hào)),其中Python.h 定義了所有Python的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和C的API函數(shù)原型。</p><p> (2) 定義一個(gè)此擴(kuò)展模塊的異常對(duì)象。</p><p> (3) 實(shí)現(xiàn)一個(gè)客戶端函數(shù), 這個(gè)函數(shù)負(fù)責(zé)將傳入的python對(duì)象參數(shù)
53、轉(zhuǎn)換為C對(duì)象并用這些參數(shù)調(diào)用foo函數(shù), 最后將結(jié)果轉(zhuǎn)換為python對(duì)象返回,如果出現(xiàn)錯(cuò)誤,則設(shè)置異常對(duì)象并返回Null。這個(gè)客戶端函數(shù)充當(dāng)python和C程序之間的參數(shù)調(diào)度者。</p><p> (4 ) 填寫(xiě)一個(gè)擴(kuò)展模塊定義的所有函數(shù)名與客戶端函數(shù)對(duì)應(yīng)關(guān)系表, 實(shí)現(xiàn)python程序和C 程序的映射。</p><p> (5) 完成擴(kuò)展模塊的初始化函數(shù)[11]。</p>
54、<p> 3.4 C語(yǔ)言與Python語(yǔ)言混合編程的接口問(wèn)題</p><p> 整個(gè)軟件編程主要是用Python語(yǔ)言, C 語(yǔ)言只占了一小部分,因此設(shè)計(jì)中,將用C語(yǔ)言編的求解器做成一個(gè)擴(kuò)展模塊,嵌入到Python語(yǔ)言中。下面給出了在本軟件中的接口設(shè)計(jì)方法。</p><p> 第一步,將用C語(yǔ)言編寫(xiě)的代碼在C 編譯器中編譯調(diào)試成功;</p><p>
55、; 第二步, 在C代碼中加入# include “Python. c”這條語(yǔ)句, 告訴C編譯器將要調(diào)用Python 庫(kù)函數(shù)。</p><p> 第三步, 在C代碼中的主函數(shù)加上"PyObject * Module_func( )"Python打包器,此打包器的作用是把接受到的Python類型的值轉(zhuǎn)換成C語(yǔ)言數(shù)據(jù)類型的值,并用這些值做為實(shí)參,放到相關(guān)的函數(shù)中去計(jì)算, 計(jì)算完成后, 如果要將結(jié)
56、果輸出到Python編寫(xiě)處理器中, 必須由打包器接受計(jì)算結(jié)果并把它們轉(zhuǎn)換成Python語(yǔ)言數(shù)據(jù)。</p><p> 經(jīng)過(guò)以上步驟即可完成C語(yǔ)言和python語(yǔ)言的混合編程。Python中將這些步驟封裝成了一個(gè)方法,即Os.system(),但是python中識(shí)別C代碼需要這樣的格式:os.system(‘./...’)[8]。</p><p> 4 功能分析及預(yù)期效果 </p&
57、gt;<p><b> 一、 功能分析</b></p><p> 利用手指控制ppt實(shí)現(xiàn)的功能有:左翻頁(yè),右翻頁(yè),開(kāi)啟全屏,退出全屏</p><p> 系統(tǒng)主要由Python開(kāi)發(fā),由于它自帶的模塊較多,所以要根據(jù)需求來(lái)調(diào)用其中對(duì)我們開(kāi)發(fā)airppt有用的模塊,需要熟悉python中各個(gè)模塊的作用和用法。airppt的原理是根據(jù)坐標(biāo)和像素來(lái)采集圖像信
58、息,然后返回到程序中,通過(guò)圖像處理工具對(duì)采集到的圖像進(jìn)行處理,最后形成動(dòng)作,來(lái)實(shí)現(xiàn)airppt的功能。</p><p> 本設(shè)計(jì)首先要用到圖像處理工具是Opencv, 從opencv圖形處理模塊中引入highgui模塊。HighHGUI只是用來(lái)建立快速軟件原形或是試驗(yàn)用的。它的設(shè)計(jì)意圖是為用戶提供簡(jiǎn)單易用的圖形用戶接口;引入圖像模塊Image對(duì)采集到的圖像進(jìn)行處理,引入os模塊提供一個(gè)統(tǒng)一的操作系統(tǒng)接口函數(shù);引
59、入時(shí)間模塊來(lái)獲取本地時(shí)間。</p><p> 其次要熟悉python的編程方法和獲取坐標(biāo)的原理,以及解決接口問(wèn)題,這樣就需要多看python方面的資料,并且要選擇編輯器來(lái)進(jìn)行代碼編寫(xiě)。代碼編寫(xiě)要求:掌握python的基本概念和基本的理論知識(shí);熟練編程工具的使用方法;對(duì)程序進(jìn)行初步的編寫(xiě)和調(diào)試。</p><p> 現(xiàn)在我只是初步實(shí)現(xiàn)了airppt的部分功能,接下來(lái)還要對(duì)它進(jìn)行調(diào)試、整合,
60、擴(kuò)充它的功能,直至其能實(shí)現(xiàn)手動(dòng)控制ppt。</p><p><b> 二、 預(yù)期效果</b></p><p> 通過(guò)測(cè)試,攝像頭可以獲取到手指的信息,光標(biāo)并且會(huì)跟隨手指的運(yùn)動(dòng)而動(dòng)作,目前還沒(méi)有實(shí)現(xiàn)虛擬點(diǎn)擊的效果,而且這個(gè)版本的光標(biāo)動(dòng)作不太穩(wěn)定,會(huì)在光標(biāo)附近晃動(dòng),所以本設(shè)計(jì)開(kāi)發(fā)了第二個(gè)版本,第二個(gè)版本不能顯示光標(biāo)動(dòng)作的痕跡,但是能控制ppt動(dòng)作,識(shí)別效果不太明顯,經(jīng)
61、分析這與攝像頭像素有關(guān)。不過(guò)還好,本設(shè)計(jì)的預(yù)期功能基本都實(shí)現(xiàn)了。以后還會(huì)增加在新功能,優(yōu)化已有的功能。下面是程序運(yùn)行截圖,圖4-1是執(zhí)行代碼后的截圖,圖4-2是操作ppt翻頁(yè)的程序運(yùn)行截圖。</p><p> 圖4-1 程序運(yùn)行截圖 </p><p> 圖 4-2 程序執(zhí)行操作截圖</p><p><b> 5 結(jié)論&l
62、t;/b></p><p> 在此次畢設(shè)中,我學(xué)到了很多東西,并且讓我瘋狂的喜歡上了編程,這段時(shí)間感覺(jué)的過(guò)的特別充實(shí),這幾個(gè)月比大學(xué)四年學(xué)的東西都多,當(dāng)然也有一些值得改進(jìn)以借鑒的地方,現(xiàn)總結(jié)如下:</p><p> 需求設(shè)計(jì):在前期查閱了相關(guān)的資料,對(duì)python的原理有一定的了解之后,就開(kāi)始著手對(duì)設(shè)計(jì)進(jìn)行需求分析。并且試著畫(huà)需求的流程圖,可是經(jīng)幾番修改再修改,還是沒(méi)能如愿,這說(shuō)
63、明自己在這方面還有很多需要提高的地方。于是就畫(huà)出了雙面板,但是我沒(méi)有充分的考慮到這些功能的實(shí)際情況,使得做出的需求很不好實(shí)現(xiàn),但是最后還是做出了切合實(shí)際的需求分析流程,在老師的教導(dǎo)下學(xué)會(huì)了制作需求分析流程的方法。</p><p> 環(huán)境配置:在做出了需求分析后,將相應(yīng)的軟件下載之后,有的軟件卻怎么也裝不上,也不能引入到程序中。用print來(lái)分行檢查代碼,我發(fā)現(xiàn)有的安裝包需要依賴關(guān)系,或者是有的需要源碼安裝,非常
64、費(fèi)事,最后還是有一兩個(gè)包裝不上,終于在老師的幫助下所有包都裝上了,原來(lái)需要外源才可以安裝。我想到了可能是這個(gè)原因,但是不知道怎么去配置外源,這也讓我認(rèn)識(shí)到要運(yùn)用合理有效的方法去迎難而上,而不是想當(dāng)然,問(wèn)題很有可能就是出在這上面。</p><p> 代碼編寫(xiě):查閱了大量的資料,有了這方面的思路后就開(kāi)始編寫(xiě)代碼了,獲取攝像頭設(shè)置,接收采集信息的設(shè)置,但是意外的情況的判斷都讓我覺(jué)得有些難以實(shí)現(xiàn),特別是判斷參照物是否動(dòng)
65、作了,是向那個(gè)方向動(dòng)作的等,獲取與處理的聯(lián)調(diào)實(shí)現(xiàn)起來(lái)確實(shí)不難么容易,還需要對(duì)編程思路進(jìn)一步的認(rèn)識(shí)。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] (丘恩Chun)(W.J.). Python核心編程(第2版)[M]. 人民郵電出版社 .2008.</p><p> [2] Doug Hellmann . Pyth
66、on標(biāo)準(zhǔn)庫(kù)[M]. 機(jī)械工業(yè)出版社. 2012.</p><p> [3] Paul Gries . Python編程實(shí)踐[M]. 機(jī)械工業(yè)出版社. 2011.</p><p> [4] Mark Lutz . Programming Python[M] 出版社. 2011. </p><p> [5] 赫特蘭 著 .Python基礎(chǔ)教程
67、(第2版)[M]. 人民郵電出版社. 2010.</p><p> [6] 魯特茲 . Python學(xué)習(xí)手冊(cè)(第3版)[M]. 機(jī)械工業(yè)出版社. 2011.</p><p> [9] 李艷紅,李海華.傳感器原理及其應(yīng)用[M].北京:北京理工大學(xué)出版社,2010. </p><p> [10] 譚浩強(qiáng).C程序設(shè)計(jì)北京[M].北京:清華大學(xué)出版社,1999.
68、</p><p> [11] 霍頓C語(yǔ)言入門(mén)經(jīng)典(第4版)[M].北京:清華大學(xué)出版社,2008.</p><p> [12] 張若愚Python科學(xué)計(jì)算[M]:清華大學(xué)出版社,2012.</p><p> [13] James PaynePython編程入門(mén)經(jīng)典 [M]:清華大學(xué)出版社,2011.</p><p> [14] 巴里深
69、入淺出Python[M].北京:東南大學(xué)出版社,2011.</p><p> [15] Y.Daniel LiangPython語(yǔ)言程序設(shè)計(jì)[M]:機(jī)械工業(yè)出版社,2013.</p><p> [16] Guido van Rossum Python Tutorial[J]:Python Software Foundation,2006.</p><p><
70、;b> 致 謝</b></p><p> 這次在實(shí)驗(yàn)室的經(jīng)歷是我在大學(xué)最后一次了,想想從大一開(kāi)始,有過(guò)多少次的實(shí)驗(yàn)課上看著同學(xué)都快走完了,自己還沒(méi)什么頭緒的焦頭爛額,現(xiàn)在想起來(lái)竟是那么的可笑,卻又帶著幾分回憶和傷感。</p><p> 我很珍惜這次做畢設(shè)的機(jī)會(huì),不僅僅是我要交出大學(xué)階段的學(xué)習(xí)成果,更是對(duì)自己能力與知識(shí)的檢測(cè)。在此,衷心地感謝我的指導(dǎo)教師。在我做畢
71、業(yè)設(shè)計(jì)階段,他自始至終給予了我精心的指導(dǎo)和嚴(yán)格的要求,為本論文的順利完成傾注了大量的心血。老師為人謙遜,熱心幫助學(xué)生,在我們做畢設(shè)遇到問(wèn)題的時(shí)候總能夠不厭其煩的耐心予以指導(dǎo),在此我要衷心的對(duì)老師說(shuō)聲謝謝。在她的熱心指導(dǎo)下,我學(xué)到的不僅僅是知識(shí),還有做人上的嚴(yán)謹(jǐn)、獨(dú)立,用科學(xué)的頭腦武裝自己。</p><p> 回首大學(xué)四年的時(shí)光,我要感謝那些幫助過(guò)我的人,也要感謝那些傷害過(guò)我的人,是他們讓我對(duì)自我有了更為清醒的認(rèn)
72、識(shí),不再沉醉于自我滿足之中,這又何嘗不是這一種收獲呢。其實(shí),最應(yīng)該感謝的還是自己,因?yàn)槁肥亲约鹤叱鰜?lái)的,有美景,也有荊棘,但重要的是,我會(huì)以更加穩(wěn)健的步伐,朝著未來(lái)勇敢的走下去。</p><p> 反思這一階段,體會(huì)最深的一點(diǎn)就是,編程就是要有清晰的思路,這樣編起來(lái)才有目的性,思維的不靈活導(dǎo)致有很多本該輕松理解的東西走了彎路,這并不是我理想中的狀態(tài)。硬件也好,軟件也罷,都需要系統(tǒng)的理論知識(shí)的支撐。徒有皮毛而不深
73、入是不行的,只有有科學(xué)理性的方法去對(duì)待,遇到問(wèn)題能鎮(zhèn)定的去沿著正確的軌道去思考進(jìn)而解決問(wèn)題是在今后的學(xué)習(xí)和工作中要時(shí)常提醒自己的,這也是畢設(shè)給我?guī)?lái)的最大收獲。感謝我敬愛(ài)的老師給我這次機(jī)會(huì)。</p><p><b> 附 錄</b></p><p> 從畢設(shè)中得到了一些課外新知識(shí),虛擬機(jī)不能用真機(jī)自帶的攝像頭。這也是我畢設(shè)中遇到的最棘手的問(wèn)題,我最后的解決方法
74、是給虛擬機(jī)安裝USB然后外置一個(gè)攝像頭,這樣才把問(wèn)題解決了。我認(rèn)為這是一個(gè)很有價(jià)值的知識(shí)點(diǎn),所有我把它記錄在這里。</p><p> 以下是本設(shè)計(jì)的完整代碼: </p><p> import time</p><p> list2=[] #定義一個(gè)空列表</p><p> cam=highgui.cvCreateCameraCa
75、pture(2) #定義攝像頭端口位置</p><p> while True:</p><p> im=highgui.cvQueryFrame(cam) </p><p> tn1=opencv.adaptors.Ipl2PIL(im) #采集到的圖像定義位tn1</p><p> tn1=tn1.r
76、esize((160,160)) #重新設(shè)置采集到的圖像的大小</p><p> size1=tn1.size #將重新設(shè)置的圖像的大小值定義位size1</p><p> pbb=tn1.load() #加載重新設(shè)置大小后的圖像tn1</p><p><
77、;b> c=0</b></p><p> d=0 #定義位置初值c:橫坐標(biāo),d:縱坐標(biāo)</p><p> e=0 ; #定義紅點(diǎn)的初始值為0</p><p> for i in range(size1[0]):<
78、;/p><p> for j in range(size1[1]): #遍歷圖像中的每個(gè)像素點(diǎn)</p><p> if pbb[i,j][0]>100 and pbb[i,j][0]>2*pbb[i,j][1] and pbb[i,j][0]>2*pbb[i,j][2]:#定義動(dòng)作的參照物,這里我將它定義為'紅點(diǎn)'</p>&
79、lt;p><b> c+=i</b></p><p> d+=j #如果該像素點(diǎn)符合我們所定義的紅點(diǎn)的特征,則將此位置加到橫縱坐標(biāo)上?</p><p> e+=1 #同時(shí)像素點(diǎn)數(shù)加1(可求出我們采集到的這張圖片中所有的紅點(diǎn)數(shù))</p><p>
80、 #print '-----------------------------------------',e#如果紅點(diǎn)數(shù)大于70個(gè)</p><p> if e>70: #如果紅點(diǎn)數(shù)大于70個(gè)</p><p> list2.append((c/e,d/e)) #將橫縱坐標(biāo)的平均值加入先前定義的空列
81、表中?</p><p> m=(160-list2[-1][0])*1280/140-100 #鼠標(biāo)移動(dòng)</p><p> n=list2[-1][1]*1024/140-100 # </p><p> # print m,n</p><p> os.system('./fake-mouse-move.x 0
82、' + str(m) + ' ' + str(n))#引入用C語(yǔ)言編寫(xiě)的程序</p><p> #if len(list2)>20: #如果列表中坐標(biāo)個(gè)數(shù)大于20個(gè)</p><p> if len(list2) > 20:</p><p> tn3=list2[-1][0]-list2
83、[0][0] #將橫坐標(biāo)的長(zhǎng)度賦值給tn3 </p><p> tn4=list2[-1][1]-list2[0][1] #將縱坐標(biāo)的長(zhǎng)度賦值給tn4</p><p> while len(list2)>3: #</p><p> list2.pop(0)</p><p> #p
84、rint '..........................',tn3</p><p> #print tn4</p><p> if tn4>50 and tn3>-50 and tn3<50:</p><p> os.system('./a.x 71')</p><p> if
85、 tn4<-50 and tn3>-50 and tn3<50:</p><p> os.system('./a.x 9')</p><p> if tn3<-100:</p><p> os.system('./a.x 114')</p><p> #print '[r
86、ight]'</p><p> #time.sleep(0.8)</p><p> if tn3>100:</p><p> os.system('./a.x 113')</p><p> #print '[left]'</p><p> #time.sleep(
87、0.8)</p><p> elif len(list2)>1:</p><p> tn3=list2[-1][0]-list2[0][0]</p><p> tn4=list2[-1][1]-list2[0][1]</p><p><b> list2=[]</b></p><p>
88、; #print '...........................',tn3</p><p> #print tn4</p><p> if tn4>50 and tn3<50 and tn3>-50:</p><p> os.system('./a.x 71')</p><p&g
89、t; if tn4<-50 and tn3<50 and tn3>-50:</p><p> os.system('./a.x 9')</p><p> if tn3<-100:</p><p> os.system('./a.x 114')</p><p> #print &
90、#39;[right]'</p><p> #time.sleep(0.8)</p><p> if tn3>100:</p><p> os.system('./a.x 113')</p><p> #print '[left]'</p><p> #time.
91、sleep(0.8)</p><p><b> del tn1</b></p><p><b> del pbb</b></p><p><b> del im</b></p><p><b> del c</b></p><p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)--基于python開(kāi)發(fā)的圖像采集器之a(chǎn)irppt
- can數(shù)據(jù)采集器設(shè)計(jì)【畢業(yè)論文】
- 2017畢業(yè)論文-基于fpga的多路信號(hào)采集器設(shè)計(jì)
- 身份證智能采集器設(shè)計(jì)-畢業(yè)論文
- 基于單片機(jī)的usb數(shù)據(jù)采集器設(shè)計(jì)【畢業(yè)論文】
- 土壤溫濕度采集器 【畢業(yè)論文】
- 基于ARM的農(nóng)田圖像采集器設(shè)計(jì).pdf
- 軟件工程畢業(yè)論文-基于python的博客設(shè)計(jì)與開(kāi)發(fā)
- 無(wú)線溫度采集器畢業(yè)設(shè)計(jì)
- 建筑能耗數(shù)據(jù)采集器的設(shè)計(jì)與開(kāi)發(fā).pdf
- 基于fpga的多路數(shù)據(jù)采集器設(shè)計(jì)
- 基于FPGA的WEBGIS數(shù)據(jù)采集器設(shè)計(jì).pdf
- 電氣工程與自動(dòng)化畢業(yè)論文船廠電能數(shù)據(jù)采集器的設(shè)計(jì)
- 畢業(yè)論文--基于dspbios的圖像采集處理平臺(tái)軟件設(shè)計(jì)
- 基于usb2.0和labwindowscvi的數(shù)據(jù)采集器開(kāi)發(fā)
- 畢業(yè)論文--基于dspbios的圖像采集處理平臺(tái)軟件設(shè)計(jì)
- 電梯遠(yuǎn)程監(jiān)控系統(tǒng)數(shù)據(jù)采集器硬件設(shè)計(jì)開(kāi)發(fā)
- 便攜式圖像采集器研制.pdf
- 基于arm的溫度采集器課程設(shè)計(jì)
- 基于掌上電腦的GPS數(shù)據(jù)采集器的開(kāi)發(fā).pdf
評(píng)論
0/150
提交評(píng)論