基於Opencv的手勢識別(QT 多執行緒)

2021-07-26 20:50:31 字數 1224 閱讀 8665

寒假閒來無事就搗騰下,先直接放效果圖~~~~

主要用opencv寫底層的演算法(並沒有用到機器學習),qt做的窗體。

演算法部分:

用的是hsv識別膚色,這種方法在亮度足夠的情況下對膚色識別還算ok,燈光的影響可以用白平衡解決(opencv的xphoto.hpp有具體的白平衡函式可以直接呼叫)。但是這種方法有個明顯的缺點就是頭部的干擾,這個我怎麼解決的下面再講。

for (int i = 0; i < y.rows; i++) 

else current[j] = 0;}}

上面就是hsv膚色識別的關鍵**,考慮到頭部對手部輪廓提取的影響。我將程式分成兩個部分。第一步是在手部還未出現在攝像頭的情況下先用hsv把頭部識別出來(直接hsv)然後把這些點作為mask儲存。第二步用mask把之後輸入的影象的對應點覆蓋成黑色。這樣就可以變相的解決自己頭部干擾手部輪廓的提取。

就這個樣子,在程式啟動的時候先執行提取mask,之後再進行手部的識別。

for (int i = 0; i < m_result.rows; i++) }}

直接覆蓋掉mask(就是頭部以及其他類膚色的環境)對應的畫素點。

之後就是正常的輪廓提取,獲取最大包圍圓,然後根據圓心的引數的變化來控制滑鼠的滾輪,這樣就可以控制網頁的上下翻動了。或者做ppt的翻頁也都可以。

至於多執行緒呢,是因為把資料處理和顯示分成了兩個執行緒來處理。因為這樣在思路上更清晰一些,單執行緒的話因為有前面的mask識別所以程式就各種繞來繞去很麻煩(各種goto)。

用qt是因為顯示可以一直保持在乙個視窗,直接imshow的話乙個視窗無法保持一直開啟的狀態,因為有前面的mask部分。

值得一提的是qt和多執行緒程式設計還是好麻煩的說。

class myclass : public qmainwindow

;

這是qt主類各種成員,寫多執行緒的是注意哇,qt對ui進行操作只能在主線程進行,子執行緒是無法操作ui的,會報錯。

就寫到這兒吧,第一次寫blog,各位看官海涵,如有錯誤或更好的idea歡迎指正。

基於Qt的OpenCV人臉識別 一

opencv對影象處理非常專業,具有很多模組。但是其gui模組 即highgui 互動性非常差,就連按鈕也得用滑動條來實現。而qt這個強大的c 圖形庫很好的避免了這個缺點,因此筆者基於qt平台,呼叫opencv庫,來進行opencv的人臉識別開發。工欲善其事,必先利其器,要想完成開發,先得在qt上搭...

基於Opencv的顏色識別

hsv模型中顏色的引數分別是 色調 h hue 飽和度 s saturation 亮度 v value 由a.r.smith在1978年建立的一種顏色空間,也稱六角錐體模型 hexcone model 1 色調 h hue 用角度度量,取值範圍為0 360 從紅色開始按逆時針方向計算,紅色為0 綠色...

opencv 手勢識別雜亂知識點

1.初始化矩陣 mat depthshow1 size 640,480 cv 8uc1,scalar 255 大小640 480 單通道灰度影象,灰度大小為255 2.設定roi區域 影象中自己感興趣的矩形區域 rect roi roi.x 50 roi.y 50 roi.width 100 roi...