一. 顯示畫面和擷取畫面
顯示畫面為 WebCam 操作的基本,故不再次敘述,然而擷取畫面是採用差異偵測中所用到的背景擷取技術,用 WebCam 抓三十張照片之後用像素數平均來抓出背景。
|
圖一 顯示畫面和擷取畫面的介面
|
二. 選取滑鼠移動的顏色以及滑鼠點擊左鍵的顏色
建立背景後畫面移動到image 畫面先用滑鼠點選第一次顏色為滑鼠移動的顏色,第二次點選的顏色為滑鼠點擊的顏色。
|
圖二 擷取顏色表單
|
三. 畫面轉換和鏡像處理
畫面轉換的技術是使用差異偵測中的背景轉換成畫面技術,在原技術中比較顏色差異的階段改為判斷顏色是否是我們所選取的顏色,如果是我們所選取的滑鼠移動顏色則轉換為顏色一(程式中設定為白色),如果偵測到的顏色是滑鼠點擊的顏色則轉換為顏色二(程式中設定為綠色),如果不是上述的兩個顏色則轉換黑色,作為背景不偵測,當轉換完成後就使用鏡像處理技術來使我們操作滑鼠時可以更加順利。
|
圖三 鏡像處理和轉換成8*8風格畫面示意圖
|
四. 準心位置抓取
本階段技術為本次專題最為困難的技術階段之一,藉由偵測畫面中的顏色作為準心標準,會先從X軸判斷把每段X軸開頭做判斷,而X軸的開頭為i*4 ,i代表的是現在掃描到的行數,而每一格皆為4Byte 所以要乘與4,在Y軸判斷會比較麻煩,人在使用畫面時會把畫面想像成一個二維矩陣來做判斷,但實際畫面的處理為一維矩陣,故在我們使用第二列第一行的位置時實際的位置為第一行位子後在加一個位子,所以在經過多次的實驗後找出計算公式出來,計算公式為 4*(J*width+i) (j為Y的行數),j*width+i 為計算出二維矩陣轉換為一維矩陣的位置,然而每個位置皆是 4byte 故要乘與 4 之後才是真正的位置,藉由兩個迴圈的計算我們可以找出擁有最多白點的 X 軸與 Y 軸,之後會使用 X 軸與 Y 軸的交界處作為準心位置。
圖四 畫面計算輔助示意圖
|
|
||||||||||||||||||||||||||||||||||||||||||
圖五 計算輔助圖
|
五. 滑鼠點擊顏色偵測
做點擊動作只須確定有無點擊故不需要像滑鼠移動一樣找出準心,而在這部份採用的是顏色判斷,藉由判斷畫面中的綠點數量來作為判斷滑鼠是否有點擊,如果綠點的數量有超過一定的數量時判斷滑鼠點擊,也可藉此來避免著雜訊干擾。
六. 滑鼠移動
在準心移動時滑鼠也會移動,但實驗過程中發現有時會因為雜訊干擾導致準心跳動太大導致滑鼠無法操縱,為了解決這個問題所以給程式一個判斷式來判斷是否是有效的,會有兩個變數 OldMouseX、OldMouseY 來儲存上個點的位置,在新的點出現時會使用勾股定理計算出新的點與舊的點的位移量,如果在允許範圍內則可以移動,如果超過允許範圍則不移動但此方法會犧牲速度提升精準度。(下圖為計算滑鼠移動的計算示意圖)
七. 尚未解決的問題
在滑鼠移動的步驟中有時會發生滑鼠無法移動的不明狀況,當程式重開之後又可以使用,然而最大的問題還是背景的問題,如果背景太雜亂以及選取當作滑鼠移動和按鍵的顏色選取不好的話容易發生雜訊太多無法抓取正確的準心移動。
操作滑鼠最大的困難點就是滑鼠的操作權會被 WebCam 奪取,造成無法操縱滑鼠關掉程式,原本是打算使用第三顏色做完關閉程式的方式,然而時間不足故無法完成。
操作滑鼠最大的困難點就是滑鼠的操作權會被 WebCam 奪取,造成無法操縱滑鼠關掉程式,原本是打算使用第三顏色做完關閉程式的方式,然而時間不足故無法完成。
沒有留言:
張貼留言