opencv手勢識別 來和電腦玩剪刀石頭布

2021-09-22 21:31:30 字數 3842 閱讀 8498

**超級亂啊,以後有時間再整理了

#include // for standard i/o

#include // for strings

#include // for controlling float print precision

#include // string to number conversion

#include #include #include // gaussian blur

#include // basic opencv structures (cv::mat, scalar)

#include // opencv window i/o

using namespace cv;

using namespace std;

int main(int argc, char *ar**)

size refs = size((int)captrefrnc.get(cv_cap_prop_frame_width),

(int)captrefrnc.get(cv_cap_prop_frame_height));

bool bhandflag = false;

const char* win_src = "source";

const char* win_result = "result";

const char* r_hand = "r_hand";

// windows

namedwindow(win_src, cv_window_autosize);

namedwindow(win_result, cv_window_autosize);

mat framehsv; // hsv空間

mat mask(frame.rows, frame.cols, cv_8uc1); // 2值掩膜

mat dst(frame); // 輸出影象

// mat framesplit[4];

vector< vector> contours; // 輪廓

vector< vector> filtercontours; // 篩選後的輪廓

vector< vec4i > hierarchy; // 輪廓的結構資訊

vector< point > hull; // 凸包絡的點集

// 對hsv空間進行量化,得到2值影象,亮的部分為手的形狀

inrange(framehsv, scalar(0, 30, 30), scalar(30, 170, 256), dsttemp1);

inrange(framehsv, scalar(156, 30, 30), scalar(180, 170, 256), dsttemp2);

bitwise_or(dsttemp1, dsttemp2, mask);

// inrange(framehsv, scalar(0,30,30), scalar(180,170,256), dst);

// 形態學操作,去除雜訊,並使手的邊界更加清晰

mat element = getstructuringelement(morph_rect, size(3, 3));

erode(mask, mask, element);

morphologyex(mask, mask, morph_open, element);

dilate(mask, mask, element);

morphologyex(mask, mask, morph_close, element);

frame.copyto(dst, mask);

contours.clear();

hierarchy.clear();

filtercontours.clear();

// 得到手的輪廓

// 去除偽輪廓

for (size_t i = 0; i < contours.size(); i++)

}// 畫輪廓

drawcontours(dst, filtercontours, -1, scalar(0, 0, 255), 3/*, 8, hierarchy*/);

// 得到輪廓的凸包絡

//去除相鄰比較近的點

for (size_t j = 0; j < filtercontours.size(); j++)}}

int t = 0;

for (int i = 0; i < hull.size(); i++)

}//剪刀石頭布

//0石頭,1剪刀,2布

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...

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

寒假閒來無事就搗騰下,先直接放效果圖 主要用opencv寫底層的演算法 並沒有用到機器學習 qt做的窗體。演算法部分 用的是hsv識別膚色,這種方法在亮度足夠的情況下對膚色識別還算ok,燈光的影響可以用白平衡解決 opencv的xphoto.hpp有具體的白平衡函式可以直接呼叫 但是這種方法有個明顯...

OpenCV利用手勢識別實現虛擬拖放效果

目錄 本文將實現一些通過手拖放一些框,我們可以使用這個技術實現一些遊戲,控制機械臂等很多有趣的事情。通過opencv設定顯示框和呼叫攝像頭顯示當前畫面 import cv2 cap cv2.videocapture 0 cap.set 3,1280 cap.set 4,720 while true ...