HexSight開發(fā)―VisualC篇_第1頁
HexSight開發(fā)―VisualC篇_第2頁
HexSight開發(fā)―VisualC篇_第3頁
HexSight開發(fā)―VisualC篇_第4頁
HexSight開發(fā)―VisualC篇_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、hexsight 開發(fā)visual c+ 篇本章節(jié)的指南將指導(dǎo)你通過使用visual c+對hexsight進行開發(fā)。只要你跟著指南的每一個步驟進行下去,就能逐步全面的了解如何為你的檢測工具添加和配置目標定位應(yīng)用程序。注意:本指南假定你對于visual c+, mfc and com有一定的初級知識。若想查看開發(fā)包自帶的編輯指南程序原文件,mfc源代碼必須安裝,且visualc+_pathmfcsrc,“visualc+ pathinclude”, “visualc+ pathmfcinclude”,”visualc+ pathatlinclude”目錄必須增加到vc+的搜索路徑的清單上,用來

2、發(fā)現(xiàn)所包含的文件(在vc+的菜單欄中選擇:工具選擇目錄附加到搜索路徑清單上的目錄)章節(jié)概要指南 1:定位器(locator)指南 2:顯示(display)指南 3:卡尺(caliper)指南 4:斑點分析器(blob analyzer)指南 5:模板定位器(pattern locator)指南 6:邊緣定位器(edge locator)指南 7:標定(calibration)指南 1: 定位器(locator)介紹第一個指南將告訴你怎樣建立一個基本的hexsight應(yīng)用程序,無論已定義模板的物體以什么角度和位置呈現(xiàn)出來,該程序都可以給其定位。創(chuàng)建工程在這一部分,你將創(chuàng)建應(yīng)用程序的工程,增加基

3、本代碼實現(xiàn)與工作界面的交互,而且增加hexsight應(yīng)用程序的控制部件,你將通過編輯它來建立應(yīng)用程序。建構(gòu)工程這里將指導(dǎo)你如何建立工程如何為工程選擇合適的風(fēng)格類型,以及需要在工程中添加哪些必須的文件來創(chuàng)建應(yīng)用程序。1啟動visual c+,創(chuàng)建一個新的mfc appwizard (exe) 工程。命名為hookinspection,創(chuàng)建一個任意名字的工作文件夾,并在路徑選擇中指定創(chuàng)建好的文件夾的準確路徑,然后點擊ok。2在mfc appwizard里的step 1,選擇dialog based。3在step 2中, 禁用about box選項 ,并規(guī)定 hook inspection 為對話框

4、標題。點擊finish。4. developer studio 將告訴你,你的程序工程的框架將使用哪些選項,點擊 ok.5. wizard 產(chǎn)生的最重要的文件是hookinspectiondlg.h 和 hookinspectiondlg.cpp。你可以開始編輯這個基本的工程了,但是你必須為你的程序增加一些程序代碼并創(chuàng)建界面,這樣才能使之成為一個可用的工程。建構(gòu)程序界面在此你將建立工作界面,你可通過它和你的應(yīng)用程序以及視覺檢測結(jié)果進行交互。1 點擊位于workspace窗口左下方的resourceview按鍵,打開該工程的對話框模板。2. 選擇對話框模板,并重新設(shè)置合適的尺寸,約 226 x

5、149??雌聊幌路降臓顟B(tài)區(qū),尺寸會在右邊顯示。3. 在對話框上, 刪掉原有的所有對話條目,增加一個group box控件。在group box控件中添加5個edit box控件,相應(yīng)的命名為idc_edit_type,idc_edit_scale,idc_edit_rotation,idc_edit_translation_x和idc_edit_translation_y。設(shè)置group box的標題,設(shè)置五個edit box的尺寸并為他們添加static text控件作為標簽。edit box中應(yīng)是空白的。你的對話框看起來如圖1的: 圖1:visual c+目標形態(tài)對話框4. 在對話框的底部

6、,增加3個命令按鈕(button控件)并命名為idc_button_inspect, idc_button_configure和idc_button_quit。給它們設(shè)置相應(yīng)的標題為:inspect,configure 和quit.5. 增加一個check box控件,并命名為idc_check_continuous,設(shè)置其標題為continuous mode,最后增加一個編輯窗口命名為idc_edit_time 和一個合適的標簽(static text)。讓其看起來如圖2。界面就此完成,存盤。圖2:帶有命令按鈕的visual c+對話框增加成員變量為了簡化和界面的交互,我們將要通過mfc c

7、lasswizard的幫助增加一些成員變量。1.按ctrl+w;就會彈出mfc classwizard 窗口。2. 點擊 member variables 成員變量按鈕,然后在class name combo box中選擇chookinspectiondlg. 你就會看到如下圖3的對話框。圖3:mfc classwizard 成員變量編輯器3.對于每一個控制id,你都必須增加一個成員變量。要增加成員變量,雙擊控制id然后填寫表格。下面你可以看見idc_button_configure完成后的形式如圖4。圖4:通過 mfc增加一個成員變量4.根據(jù)表1的清單增加其它的成員變量表1:成員變量cont

8、rolidtypeidc_button_inspectcbuttonminspectbuttonidc_button_quitcbuttonmquitbuttonidc_check_continuouscbuttonmcontinuouscheckidc_edit_rotationceditmrotationtextidc_edit_scaleceditmscaletextidc_edit_timeceditmtimetextidc_edit_translation_xceditmtranslationxtextidc_edit_translation_yceditmtranslationyt

9、extidc_edit_typeceditmtypetext增加一個 hexsight 應(yīng)用控制組件你將要給對話框增加一個activex控制組件。hexsight應(yīng)用控制組件是每一個hexsight機器視覺應(yīng)用系統(tǒng)的核心。1. 在對話框模板上單擊鼠標右鍵,在窗口的頂部選擇insert activex control.2. 下拉滾動條,找到 hsapplication control。選中它然后點擊ok。于是hexsight應(yīng)用控制組件便作為一個新的圖標顯示于對話框??梢园阉戏胖烈粋€合適的位置如圖5。圖5:帶hexsight 應(yīng)用組件的對話框3. 鼠標在hexsight application

10、 control 圖標上單擊右鍵,然后在彈出菜單中選擇properties,為其命名為idc_control_application。4. 你必須在類里手動增加一個數(shù)據(jù)成員。注意:不要用classwizard來為hexsight控制組件增加變量。由classwizard生成的wrappers 在使用hexsight activex 控制庫時可能產(chǎn)生兼容性的問題。在hexsight下你必須分布式使用 wrappers。當(dāng)你增加一個hexsight 控制組件,要采取以下步驟。5. 打開 hookinspectiondlg.h 文件。在現(xiàn)有的語句(普通字體顯示)之后增加以下語句(粗體顯示):#if_

11、msc_ver=1000#pragma once#endif/_msc_ver_=1000#include hsapplication.h./afx_data(chookinspectiondlg)enumidd=idd_hookinspection_dialog;hsapplication mapplicationcontrol;6.打開hookinspectiondlg.cpp 文件,并在dodataexchange函數(shù)中增加以下語句(黑體)。/afx_data_map(chookinspectiondlg)ddx_control(pdx,idc_control_application,

12、mapplicationcontrol);7. 在屏幕底部選擇fileview 鍵。8. 右擊 hookinspection 文件節(jié)點,選擇add files to project。9. 進入 hexsight的安裝目錄然后打開wrappers目錄。記錄該目錄的完整路徑,你稍后將會用到它。10.選擇以下文件: hsapplication.h, hsapplication.cpp, hsarc.h,hsarc.cpp, hsline.h, hsline.cpp, hsmodeloptimizerinterface.h, hsmodeloptimizerinterface.cpp, hspoint

13、.h, hspoint.cpp, hscalibration.h, hscalibration.cpp, hsdatabase.h, hsdatabase.cpp,hserrorobject.h, hserrorobject.cpp, hsexplorer.h, hsexplorer.cpp, hsimage.h, hsimage.cpp, hslocator.h, hslocator.cpp,hsmodeleditorinterface.h, hsmodeleditorinterface.cpp,hsprocessmanager.h, hsprocessmanager.cpp, hsscen

14、e.h, hsscene.cpp,hsview.h 和 hsview.cpp. 點擊 ok.11. 在編輯之前,向目錄清單增加wrappers路徑,該目錄用于所包含文件的搜索。使用菜單欄中的project/setting. . 選擇c/c+ 鍵,然后選擇分類(category)為:preprocessor。修改combo box 的設(shè)置(setting for)為:適合所有配置(all configuration)。把wrappers 路徑(先前提到的)增加到additional include directories編輯欄中去。點擊ok.12. 現(xiàn)在你可以編輯你的工程而不會收到錯誤信息。給主

15、框加程序增加基本代碼你需要增加基本代碼,這樣就可和你的應(yīng)用系統(tǒng)進行交互。當(dāng)在瀏覽該指南的其它章節(jié),需要給應(yīng)用程序增加新的功能時,你只需在程序代碼中增加些其他語句即可。1. 返回至資源編輯器(resource editor),打開你的應(yīng)用程序的對話欄。2. 鼠標左鍵雙擊quit.3. 此時會彈出一個窗口(如果沒有,這是因為“double-click in dialog editor edits” 的代碼選項(在toolsoptionscompatibility tab中)并沒有被選中)。雙擊消息bn_clicked,會彈出對話框要你確定所增加函數(shù)的名字,接受缺省名(onbuttonquit)。4

16、.點擊edit existing然后在函數(shù)中增加以下語句:void chookinspectiondlg:onbuttonquit()waitforcompletion();enddialog( idok );這樣當(dāng)點擊quit鍵時,就會終止應(yīng)用程序。5. 你必須給你的工程增加waitforcompletion函數(shù)。點擊classview 鍵而且右擊chookinspectiondlg類,選擇add member function.命令。該函數(shù)類型是void,把它聲明為waitforcompletion。指出該函數(shù)是private。點擊ok,在該函數(shù)中增加以下語句:void chookinsp

17、ectiondlg:waitforcompletion()if ( mcontinuouscheck.getcheck() != 0 )mcontinuouscheck.setcheck( 0 );6. 返回資源編輯器,雙擊configure (按照創(chuàng)建quit鍵相同的步驟進行)在代碼中增加以下語句:void chookinspectiondlg:onbuttonconfigure()mapplicationcontrol.showinterface( false ,hexsight_none);這些代碼使得當(dāng)你在程序?qū)υ捒蛑悬c擊configure按鈕時彈出hexsight applicati

18、on control的一個非模態(tài)對話框界面.7. 在資源編輯器中,雙擊inspect (按照創(chuàng)建quit鍵相同的步驟進行) 在代碼中增加以下語句:void chookinspectiondlg:onbuttoninspect()tryhsprocessmanager lmanager;minspectbutton.enablewindow( false );lmanager = mapplicationcontrol.getprocessmanager();/ inspection loopdodoevents();while( mcontinuouscheck.getcheck() = 1

19、);minspectbutton.enablewindow( true );catch( . )minspectbutton.enablewindow( true );throw ;這是一個用于檢查應(yīng)用程序的主循環(huán)。直到在界面中使continuous mode失效,它才會結(jié)束循環(huán)。8. 在c+中,沒有與visual basic中doevents函數(shù)功能相當(dāng)?shù)暮瘮?shù)。因此你必須自己創(chuàng)建doevents函數(shù)。點擊classview 鍵而且右擊chookinspectiondlg類,選擇add member function.命令。該函數(shù)類型是void,把它聲明為doevents(void)。點擊ok

20、,在該函數(shù)中增加以下語句:chookinspectiondlg:doevents( )msg lmessage;while ( peekmessage( &lmessage, null, 0, 0, pm_remove ) !=false )translatemessage( &lmessage );dispatchmessage( &lmessage );9. 最后,你必須在退出程序之前增加消息操作器來停止連續(xù)模式(continuous mode)。按ctrl+w;就會彈出mfc classwizard。點擊消息映像message maps按鈕。在類名中選擇chookinspectiondl

21、g。在目標ids(object ids)中選擇chookinspectiondlg。在消息清單中,找到并雙擊wm_close和wm_destro0y。在新的函數(shù)中增加以下語句:void chookinspectiondlg:onclose()waitforcompletion();cdialog:onclose();void chookinspectiondlg:ondestroy()cdialog:ondestroy();waitforcompletion();10. 你已完成了該應(yīng)用程序的代碼編制。運行并調(diào)試該應(yīng)用程序。當(dāng)你確信一切正常,就可以寸盤,然后繼續(xù)下一個節(jié)。增加獲取設(shè)備(acqu

22、isition device)工具在本節(jié),你將學(xué)到怎樣在hexsight application control中例示一個程序。你同樣會學(xué)到怎樣配制一個獲取設(shè)備工具(acquisition device)。該工具可從現(xiàn)有的數(shù)據(jù)庫文件中獲取一個灰度值圖像來模擬所獲取的實際圖像。對該獲取設(shè)備進行示例為了建立視覺應(yīng)用程序,hexsight程序被用來作為應(yīng)用程序控制過程管理器(application controls manager)進行示例。1. 在對話模板上,右擊hexsight application control。從菜單中選擇hsapplication control objectedit。

23、這時會顯示hexsight應(yīng)用程序控制器(application controls manager)界面,激活的頁面就是程序管理器(process manager)。在程序管理器(available process)的可用程序清單中,選擇hsacquisitiondevice然后點擊add process。獲取設(shè)備(acquisition device)的窗口就會顯示出來。在此本節(jié)指南的最后,hexsight 應(yīng)用程序控制器應(yīng)如圖6所示:圖6:hexsight應(yīng)用控制程序管理器配置獲取設(shè)備(acquisition device)你將用現(xiàn)有的圖像資料來模仿所獲取的實際圖像。用于該指南的數(shù)據(jù)庫是建

24、立在相同的目標圖像之上的,只是實際圖像旋轉(zhuǎn)了不同的角度而已。1.在獲取設(shè)備通用面板(acquisition device general panel)中,鍵入acquisition作為程序名(取代hsacquisitiondevice0)2.在configuration面板中,選擇input鍵,從清單中選擇file emulation。3.點擊load然后載入以下文件:installationpathtutorialvisualc+hookinspectiondatahook.hdb.4. 除了第一個image0,使所有數(shù)據(jù)庫的其它圖像不被選中,這就確保在稍后的指南中該圖像可被用來創(chuàng)建摸板。圖

25、7:獲取設(shè)備配置面板5. 在標定(calibration)和輸出(output)子面板中保留缺省設(shè)置,點擊ok返回hexsight應(yīng)用控制系統(tǒng)(application control)的程序管理器(process manager)。為繼續(xù)完成程序管理器(process manager)中的程序示例,你可以點擊execute sequence。舉例來說,如果不止一個可用的圖像存在于獲取設(shè)備(acquisition device)的清單(emulation list)中,點擊程序管理器中的execute sequence就會輸出一個新的灰度圖像,然后執(zhí)行清單中隨后的程序。顯示背景(scenes)和

26、圖像(images)hexsight應(yīng)用控制系統(tǒng)(application control)的explorer面板中顯示了應(yīng)用程序運行數(shù)據(jù)庫中所有視圖的層次關(guān)系,背景(scenes)和圖像(images)都保留在應(yīng)用程序的數(shù)據(jù)庫中。1. 在hexsight 應(yīng)用控制系統(tǒng)(application control)中選擇explorer面板。2. 點擊旁邊的 + 號來展開數(shù)據(jù)庫。3.展開acquisition, 然后是images. 點擊grey-scale image。這將顯示由獲取程序輸出的灰度圖像,如圖8所示:圖8:hexsight應(yīng)用控制系統(tǒng) explorer增加定位器工具(locator

27、tool)使用輪廓的幾何因素,定位器(locator)可以找到用輸入灰度圖像定義了模板的目標。定位器(locator)的界面提供: 一個對輸入和輸出進行配置的綜合面板(general)。 一個輪廓面板(contour)。該面板可以設(shè)置圖像中感興趣的部分而且可以隨意訂制輪廓檢測參數(shù)。 一個用于創(chuàng)建和編輯模板用的模板(model)。 一個搜索(search)面板。該面板是用于對旋轉(zhuǎn)、灰度因素、所找到的目標數(shù)量等參數(shù)設(shè)定約束條件的。 一個結(jié)果面板(result)可以用來顯示搜索的結(jié)果。初始化定位器(locator)這里增加一個定位器(locator)程序,其方法與增加獲取設(shè)備(acquisition

28、 device)的步驟相同。1. 在hexsight應(yīng)用控制程序管理器(application control process manager)中,從hexsight locator tools文件夾中選擇hslocator點擊add process.2. 在新增加的定位器(locator)程序的屬性窗中,選擇general 鍵3. 鍵入名字 locator ,取代 hslocator1.4. 在輸入部分,點擊數(shù)據(jù)庫選擇圖標,然后選擇acquisition-grey-scale image. 如圖9:圖9:數(shù)據(jù)庫選擇圖標5.在輸出框架中保留缺省名 model view 和instance sc

29、ene。保留它們相應(yīng)的check box,這樣就能確保模板顯示和實例背景輸出到運行數(shù)據(jù)庫。6. 點擊execute.輪廓(contour)檢測參數(shù)1. 選擇 contour 鍵2. 保留search area的缺省設(shè)置.為了加速定位器 (locator)程序速度,使entire imagecheck box不被選中可以強制搜索輸入圖像的特定區(qū)域而非完整的圖像,叫做搜索區(qū)search area。entire image特征不被用于這個指南。3.為 detection 參數(shù)保留缺省設(shè)置。設(shè)置parameter based on combo box為all models,將可以為當(dāng)前模板自動選擇最佳

30、輪廓檢測參數(shù)。通過在combo box選擇custom可以手動訂制輪廓的檢測方案。通常輪廓檢測參數(shù)的自動選擇都能工作的最好,只有在輸入圖像等級較差時才有必要采用手動訂制方案。4.點擊 execute.后,通過點擊顯示窗下方的 detail, level 或 both 鍵來觀察輪廓粗糙度等級的不同。創(chuàng)建模板在這一部分,你將學(xué)到怎樣用模板編輯器來創(chuàng)建一個目標的模板。模板是一個參考或一種概念,它代表了將要被定位器(locator)的搜索程序用來識別以及給定位的目標的輪廓。該模板可被存儲于數(shù)據(jù)庫文件中,以便以后使用。1. 選擇model鍵,然后在models框中點擊add鍵。然后create new

31、model對話框馬上顯示出來如圖10圖10:創(chuàng)建新模板對話框2. 給模板命名hook.3. 點擊ok打開模板編輯器(model editor)使用模板編輯器(model editor)模板編輯器用來創(chuàng)建新模板以及修改現(xiàn)存的模板。一旦你已經(jīng)創(chuàng)建了用于該應(yīng)用程序的hook模板,你可以將其保存,以便以后再用。創(chuàng)建源輪廓線以及選擇模板特征定位器使用兩個粗糙等級來識別目標以及為目標定位:outline level和detail level。outline level被用來快速識別潛在的目標實例。detail level被用來在圖像內(nèi)確定這是否是正確的目標以及精確定位。當(dāng)選擇outline level和d

32、etail level,源輪廓將會被創(chuàng)建。然后從源輪廓選擇特征來創(chuàng)建模板。當(dāng)automatic levels check box被選中時,這兩個輪廓檢測參數(shù)(outline level 和 detail level) 將通過分析模板的邊界區(qū)域自動實現(xiàn)最優(yōu)化。通常在創(chuàng)建一個模板時采用自動輪廓檢測參數(shù)。當(dāng)產(chǎn)生源輪廓時,contrast threshold 被用來設(shè)置靈敏性并進行對比。通過在combo box選擇fixed value可以手動設(shè)置contrast threshold,或通過選擇adaptive low sensitivity, adaptive normal sensitivity

33、或 adaptive high sensitivity.來進行自動設(shè)置。tracking inertia被用來密和源輪廓中出現(xiàn)的小間隙。它定義當(dāng)建立源輪廓時,源輪廓中可以被密和來連接兩個邊緣元素的最長的間隙。一旦源輪廓被發(fā)現(xiàn), 必須選擇特征來建立模板。通過設(shè)置 feature selection滑塊到none來手動選擇特征,或通過設(shè)置less, normal, more 或 all進行自動選擇特征。設(shè)置滑塊到 normal 將會設(shè)置介于outline和detail等級的最佳特征。增加該設(shè)置將會增加更多特征,但會導(dǎo)致搜索程序變慢。減少設(shè)置會導(dǎo)致識別問題,因為模板可能缺少基本特征。在本指南中,我們

34、將使用缺省的輪廓探測以及特征選擇參數(shù)來建立模板,如圖11所示:圖11:模板編輯器界面1. 在 contour detection 框中,保留automatic levelscheck box選中,將tracking inertia 置0,以及將contrast threshold combo box置為adaptive normal sensitivity.2.在feature selection框中,保留slider在缺省的normal位置。3.在顯示中,拖動并調(diào)整綠色虛線長方形的大小(該模板的范圍欄)把整個目標封裝其內(nèi)。4. 點擊 build model.現(xiàn)在便創(chuàng)建了一個模板。輪廓檢測參數(shù)

35、已被最優(yōu)化處理,而且特征選擇包括了outline和detail levels。outline level被設(shè)為8,而detail level被設(shè)為1。為了校驗在建立模板時不會碰到什么問題,檢查messages 文本欄。你可以用顯示窗來觀看模板。通過選擇顯示窗口底部的outline鍵,你可以以outline level來觀看模板。 所選特征以粗體紫紅色線條顯示出來。沒有用到的輪廓以藍色線條顯示出來。通過選擇顯示窗口底部的detail鍵,可以以detail level來觀看特征。所選特征以粗綠線條顯示出來。在detail level下,沒有用到的輪廓以細藍線條顯示出來。點擊顯示窗口底部的both鍵

36、,可以同時觀看outline和detail level。該模板現(xiàn)在可以用來給目標定位。我們將對其進行編輯,看模板編輯器怎樣能夠用來訂制具體的模板從而用于特定的用途。從模板中刪除特征在本指南中所建立的應(yīng)用程序?qū)⒈挥糜跈z測金屬鉤的外部輪廓的特征。這些步驟將用其外部輪廓進行局部的定位,以及應(yīng)用工具來檢查金屬鉤內(nèi)部的長方形,孔型和標簽。這些特征都需要被檢測到,因為它們可能在實際的部件中被遺漏、錯誤測量尺寸、或由于外部輪廓而錯誤定位。因為這些特征并不穩(wěn)定,所以他們一定要從模板中被刪除,以達到圖像外部輪廓定位所能達到的最高精確度。第一步將是在outline level下刪掉不想要的特征。1. 在顯示窗口底

37、部點擊 outline 鍵。這樣就可以在outline level下編輯模板。在model contents框中的表格顯示 features 子面板,該特征子面板用于模板的outline level。2. 點擊model contents 框中的features 鍵來激活特征表格。3. 通過點擊顯示窗中的特征或在特征欄中選擇特征來選擇所想要得到的圓矩形特征。4 點擊 delete從模板中刪除該特征。第二步將是在detail level下刪掉不想要的特征。1. 在顯示窗口底部點擊 detail 鍵。這樣就可以在detail level下編輯模板。在model contents框中的表格欄顯示 f

38、eatures 子面板,該特征子面板用于模板的detail level。2. 除了外部輪廓,如果要選擇所有其它特征,可以在顯示窗或features欄中,同時按住ctrl并鉤選這些特征。3. 點擊 delete 從模板中刪除這些特征?,F(xiàn)在不穩(wěn)定特征已從模板中刪除。要以outline level和detail level同時觀看,在顯示窗底部點擊both鍵。在這種瀏覽模式下,模板不可編輯。為模板設(shè)置目標坐標系統(tǒng)關(guān)于部件的外部輪廓,檢測程序需要將該特征的測量尺寸顯示出來。要安裝一個參考框,來顯示這些檢測值,需要為該部件定義一個目標坐標系。1. 在顯示窗底部點擊outline 或 detail 鍵。這

39、樣就可以編輯目標坐標系。2. 在model contents框中點擊coordinate system 鍵來激活坐標系面板。3. 用鼠標在目標之上定位坐標系標記(黃軸),如圖12所示。要旋轉(zhuǎn)目標的坐標系,點擊x軸或y軸的箭頭,然后拖動鼠標。要移動坐標系,點擊x軸或y軸的交叉點,然后拖動鼠標。你也可拖動軸的箭頭來拉長他們,這不會對坐標系本身有什么影響,不過可以幫你在長特征上排列標記。 通過坐標系面板的文本欄使最后的定位變的更精確。圖12:調(diào)整模板坐標系的位置和方向給模板增加參考點對于某些應(yīng)用程序而言,將一個定位的目標實例模板上的特殊點的位置轉(zhuǎn)換為世界坐標系是很有用的。這樣做不必手工計算坐標的轉(zhuǎn)換

40、,參考點可以定義在模板上。在這一應(yīng)用中,我們將在金屬鉤上方的圓孔上增加參考點。1. 點擊顯示窗底部的outline或detail 鍵,這樣你就可以編輯參考點了。2. 在model contents 框中點擊reference points鍵激活參考點面板。3. 點擊add 增加一個參考點。4. 點擊并拖動目標標記,給部件中上圓孔的參考點定位。調(diào)節(jié)放大率使之更精確。使用reference points 面板中的文本欄,對其效果進行微調(diào)。圖13:使用模板編輯器增加參考點該參考點并不用于給部件定位,只有輪廓特征被用于定位目標。然而,對于被定位的每個目標,參考點的位置應(yīng)考慮該實例的比例、旋轉(zhuǎn)和轉(zhuǎn)換。你

41、可以在模板上增加多個你所需要的參考點。給模板手動增加特征在模板編輯器中,你可以從outline和detail level不需要用到的輪廓中選擇特征。要在outline level下增加特征,可按下面步驟進行:1. 在顯示窗底部點擊outline鍵,這樣就可以在outline level下編輯模板。2. 在 model contents框中點擊features鍵激活特征欄。3. 使show 框中的 grey-scale image check box不被選中,這樣就僅僅顯示輪廓。使綠色的沒用到的輪廓更明顯。4. 在顯示窗中,點擊沒有用到的輪廓之一,以圓長方形舉例。該輪廓變成亮藍色。5. 在輪廓上

42、點擊一個起始點,按住ctrl 鍵并且點擊輪廓上其它的點。則所選的特征顯示成紅色。6. 要改變你的選擇,只需在輪廓上點擊同時按住shift鍵。在model contents框中點擊add 鍵,就會在特征欄中顯示新的特征。7.在欄目中選擇新增加的特征并且點擊delete鍵,就可從模板中刪掉它。8. 要把整個完整的圓長方形作為特征增加進去,在顯示窗中雙擊它,這樣整個輪廓被選中。點擊 add 給模板增加該特征。9. 考慮到它對于應(yīng)用程序不穩(wěn)定,因此在欄目中選擇新增加的特征并且點擊delete鍵,從模板中刪掉它。分析模板當(dāng)手動編輯完一個模板,有必要檢驗它是否能夠工作正常。在model contents框

43、中點擊analyze model.任何問題都會顯示在messages欄中。保存模板數(shù)據(jù)庫當(dāng)創(chuàng)建完一個模板后,必須把它保存在模板數(shù)據(jù)庫中,否則當(dāng)你離開應(yīng)用程序時,它就會丟失。要保存模板,按以下步驟進行。1. 在模板編輯器中,點擊右下方的ok鍵。這就能將新創(chuàng)建的模板轉(zhuǎn)換為定位器的活動模板數(shù)據(jù)庫。2. 在定位器的屬性窗中,選擇model鍵。3. 在database窗中,點擊save as.。在彈出的文件另存對話框中,設(shè)置模板為名hookmodel并將其保存在你的工作目錄下。你會發(fā)現(xiàn)在同一個應(yīng)用程序中把模板文件存儲的靠近其他hexsight文件將會非常便利。例如圖像模仿文件(image emulati

44、on files),程序管理器配置文件(process manager configuration file)等。4. 你可在任何時候通過點擊models框中的edit鍵返回,重新編輯你的模板。配置搜索參數(shù)搜索參數(shù)用來約束目標的搜索和識別,以及對定位算法進行配置。1. 選擇 search 鍵。2. 使 nominal scale check box被選中。文本欄中的值應(yīng)為 1.0.3. 使 nominal rotation check box不被選中,其范圍為 -180.0 至 180.0.4. 其它所有參數(shù)保留其缺省設(shè)置。執(zhí)行定位器以及檢驗結(jié)果創(chuàng)建完模板,而且配置好搜索后,第一步就是檢驗定位

45、器在用來創(chuàng)建模板的圖像中找到目標。1. 選擇 results 鍵。2. 點擊定位器屬性窗底部的execute。3. 確認實例正確定位。4. 點擊 show results viewer 來觀看添加到灰度圖像上的定位實例。如圖14所示:5. 將定位器屬性窗和results viewer 移到屏幕一角。圖14:定位器工具的結(jié)果顯示及其面板下一步就是驗證目標是否已經(jīng)在相應(yīng)的模仿數(shù)據(jù)庫圖像中定位。1. 在程序管理器(process manager)中,打開獲取設(shè)備(acquisition device)屬性窗。選擇configuration面板,然后點擊 enable all 激活模仿數(shù)據(jù)庫中的所有圖

46、像。點擊 ok 關(guān)閉獲取設(shè)備(acquisition device)屬性窗。2. 返回程序管理器點擊 execute sequence.3. 在定位器屬性窗的 results 面板中,檢查實例是否被正確定位。返回程序管理器(process manager),點擊execute sequence幾次使定位器能應(yīng)用于每一個圖像中。4. 關(guān)閉結(jié)果瀏覽窗,返回定位器屬性窗,點擊 ok.5. 現(xiàn)在可以返回 visual c+ 對話框模板并且保存你的成果。關(guān)閉窗口退出程序管理器(process manager)。如果要返回應(yīng)用程序,你可以右擊 hexsight 圖標并選擇hsapplication con

47、trol objectedit.為定位器增加代碼在本節(jié),你將需要增加代碼把定位器所發(fā)現(xiàn)的實例的屬性輸出到你的應(yīng)用程序界面中。 1.在hookinspectiondlg.cpp:的包含文件之后增加該行:#include hslocator.h2.找到 onbuttoninspect 函數(shù),并且增加如下粗體顯示的語句:note: existing code appears in normal typeface.hsprocessmanager lmanager;hslocator llocator;dword lstarttime;dword lstoptime;minspectbutton.en

48、ablewindow( false );lmanager = mapplicationcontrol.getprocessmanager();llocator = lmanager.getprocess( colevariant( locator ) );該代碼給包含在hexsight應(yīng)用程序控制器(application control)的定位器程序創(chuàng)建了一個參考。該參考將被用作有規(guī)劃的訪問工具。 3.在onbuttoninspect程序內(nèi)現(xiàn)有的 “do” 循環(huán)中,增加以下如黑體所示的語句:dolstarttime = gettickcount();/ execute processes i

49、n the process listlmanager.execute( colevariant( acquisition ),colevariant( locator ) );if ( llocator.getinstancecount() 0 )cstring lbuffer;/ an instance of the object is found/ output the properties of the located instance in/ text boxesmtypetext.setwindowtext(llocator.getinstancemodelname(0) );lbu

50、ffer.format( %.2f,llocator.getinstancescalefactor(0) );mscaletext.setwindowtext( lbuffer );lbuffer.format( %.2f, llocator.getinstancerotation(0);mrotationtext.setwindowtext( lbuffer );lbuffer.format( %.2f,llocator.getinstancetranslationx(0) );mtranslationxtext.setwindowtext( lbuffer );lbuffer.format

51、( %.2f,llocator.getinstancetranslationy(0) );mtranslationytext.setwindowtext( lbuffer );else/ no object is foundmtypetext.setwindowtext( );mscaletext.setwindowtext( );mrotationtext.setwindowtext( );mtranslationxtext.setwindowtext( );mtranslationytext.setwindowtext( );/ compute elapsed timelstoptime

52、= gettickcount();updateelapsedtime( lstarttime, lstoptime );doevents();while( mcontinuouscheck.getcheck() = 1 );循環(huán)每執(zhí)行一次,該代碼就按照從“acquisition”到“l(fā)ocator”的順序執(zhí)行應(yīng)用程序。如果程序管理器(application control)的執(zhí)行方式?jīng)]有指定任何參數(shù),則整個程序執(zhí)行一次,在這個例子中會產(chǎn)生相同的結(jié)果。hexsight 程序執(zhí)行之后,已定位的實例的造型 (比例,旋轉(zhuǎn)和轉(zhuǎn)換)以及類型(模板名)都會顯示在界面中。4.你必須增加一個 updateela

53、psedtime 私有成員函數(shù),聲明如下:voidchookinspectiondlg:updateelapsedtime(dword const pstart,dword const pstop )dword lelapsed;cstring lbuffer;if ( pstop pstart )lelapsed = (dword)(-1) - pstart + pstop + 1;elselelapsed = pstop - pstart;lbuffer.format( %lu, lelapsed );mtimetext.setwindowtext( lbuffer );該函數(shù)允許給 ge

54、ttickcount 界限設(shè)個旁路,其限制為49.7 天。如果你需要知道在某工業(yè)應(yīng)用中已耗費的時間,你必須在gettickcount旁使用別的解決方案。5.這時,你的應(yīng)用程序界面和代碼需要正確嚴密,如同例子:installationpathtutorialvisualc+hookinspectionpart1. 保存工作,準備下一步。測試應(yīng)用程序準備測試你的程序1.按 f5 鍵開始運行,點擊 inspect 幾次。每次你按inspect,文本欄中顯示的實例的屬性都應(yīng)得到更新。2. 使 continuous mode check box被選中,并點擊inspect。 應(yīng)用程序應(yīng)以連續(xù)模式運行。使

55、check box不被選中,則退出連續(xù)模式。關(guān)閉窗口或點擊quit來退出運行模式。這樣就結(jié)束該部分指南。調(diào)試之后,保存工作并進入下一個指南,在下一個指南中你將給應(yīng)用程序增加顯示窗。指南2:顯示(display)簡介第二個指南教你怎樣給你的應(yīng)用程序界面增加顯示窗(display)。你可通過顯示窗(display)查看hexsight應(yīng)用程序顯示的圖像和背景。給界面增加顯示窗(display)首先,你將通過修改你的應(yīng)用程序的界面來增加顯示窗(display)。1. 通過展開對話模板來開始。設(shè)置對話框模板的寬度和高度近似為486、239。重新編制文本欄和按鍵,如圖15所示對話框:圖15:給visual c+對話框重新設(shè)置尺寸2. 右擊對話框并選擇 insert activex control. 在彈出對話框窗口中向下拖動滾動條找到hsdisplay control,選擇并點擊 ok。 hexsight顯示窗便出現(xiàn)在對話框。3.設(shè)置hexsight顯示窗寬度為 253 和高度為 225。 在其屬性中,改變hexsight顯示窗 id 為idc_control_display.圖16:visual c+對話框4. 手動增加 hsdisplay類

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論