首页 > 分享 > 手势识别与检测(opencv)资源

手势识别与检测(opencv)资源

// #include "stdafx.h" //#include "cv.h" #include <cv.h> #include <highgui.h> //#include <windows.h> //#include <WinAble.h> #include <vector> using namespace std; int pmsf_value = 5;//均值飘逸分割平滑系数 int MopEx_value = 2;//开运算 int Hmatch_value = 25;//模板匹配系数 //亮度 int V_low = 30; int V_high = 250; //饱和度 int S_low = 10; int S_high = 170; //色相 int H_low_max = 40; int H_high_min = 100; int if_high_light = 1; //是否高光补偿 IplImage *src = 0; IplImage *srcResize = 0; IplImage *img_YCrCb = 0; CvSize newSize; CvSize sz; IplImage *tmp1; IplImage *tmp2; IplImage *tmp3; IplImage *src2; IplImage *src1; //////////////////////////////////////////////////////////////////////////////////////////////////////////////// IplImage *YCrCb; IplImage *YCrCb_mask; IplImage *Y_channel,*Cr_channel, *Cb_channel; IplImage *Y_cmp,*Cr_cmp, *Cb_cmp; CvScalar Y_lower; CvScalar Y_upper; CvScalar Cr_lower; CvScalar Cr_upper; CvScalar Cb_lower; CvScalar Cb_upper; CvScalar YCrCb_lower; CvScalar YCrCb_upper; /////////////////////////////////////////////////////////////////////////////////////////////////////////////// void init_hand_YCrCb() {//img_YCrCb = cvCreateImage( sz, 8, 3);YCrCb_mask = cvCreateImage(sz,IPL_DEPTH_8U,1);;//最终的图片YCrCb = cvCreateImage(sz,IPL_DEPTH_8U,3);//三通道Y_channel = cvCreateImage(sz,IPL_DEPTH_8U,1);Cr_channel = cvCreateImage(sz,IPL_DEPTH_8U,1);Cb_channel = cvCreateImage(sz,IPL_DEPTH_8U,1);//按范围截取后Y_cmp = cvCreateImage(sz,IPL_DEPTH_8U,1);Cr_cmp = cvCreateImage(sz,IPL_DEPTH_8U,1);Cb_cmp = cvCreateImage(sz,IPL_DEPTH_8U,1);//Y,Cr,Cb的颜色范围Y_lower = CV_RGB(0,0,130);Y_upper = CV_RGB(0,0,130);Cr_lower = CV_RGB(0,0,125);Cr_upper = CV_RGB(0,0,125);Cb_lower = CV_RGB(0,0,132);Cb_upper = CV_RGB(0,0,147);YCrCb_lower = cvScalar(0,0,132,0);YCrCb_upper = cvScalar(130,125,147,0); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// void hand_YCrCb() {//转换到YCrBrcvCvtColor(src2,img_YCrCb, CV_RGB2YCrCb);//分割到Y,Cr,CbcvSplit(img_YCrCb,Y_channel,Cr_channel,Cb_channel,0);//将Y_channel的位于 Y_lower 和 Y_upper 之间的元素复制到 Y_tmp中cvInRangeS( Y_channel, Y_lower, Y_upper, Y_cmp);cvInRangeS(Cr_channel,Cr_lower,Cr_upper ,Cr_cmp);cvInRangeS(Cb_channel,Cb_lower,Cb_upper ,Cb_cmp);//合并Y,Cr,Cb通道到YCrCb中cvMerge(Y_cmp,Cr_cmp,Cb_cmp,0,YCrCb);//显示结果cvShowImage("YCrCb_mask",YCrCb);//cvInRangeS (img_YCrCb, YCrCb_lower, YCrCb_upper, YCrCb_mask);//cvShowImage( "YCrCb_mask", YCrCb_mask); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////IplImage* hsv_image;IplImage* hsv_mask;CvScalar hsv_min;CvScalar hsv_max;IplImage *H_img,*S_img, *V_img;IplImage *H_mask, *H_mask1,*S_mask, *S_mask1, *V_mask, *V_mask1, *V_mask2; /////////////////////////////////////////////////////////////////////////////////////////////////////////////// void init_hand_HSV() {hsv_image = cvCreateImage( sz, 8, 3);hsv_mask = cvCreateImage( sz, 8, 1);hsv_min = cvScalar(0, 20, 20, 0);hsv_max = cvScalar(20, 250, 255, 0);//hsv_mask->origin = 1;//方法2: 单独处理各个通道H_img = cvCreateImage(sz,IPL_DEPTH_8U,1);S_img = cvCreateImage(sz,IPL_DEPTH_8U,1);V_img = cvCreateImage(sz,IPL_DEPTH_8U,1);H_mask = cvCreateImage(sz,IPL_DEPTH_8U,1);H_mask1 = cvCreateImage(sz,IPL_DEPTH_8U,1);S_mask = cvCreateImage(sz,IPL_DEPTH_8U,1);S_mask1 = cvCreateImage(sz,IPL_DEPTH_8U,1);V_mask = cvCreateImage(sz,IPL_DEPTH_8U,1);V_mask2 = cvCreateImage(sz,IPL_DEPTH_8U,1);V_mask1 = cvCreateImage(sz,IPL_DEPTH_8U,1); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// void color_blance() {CvScalar avg = cvAvg(H_img, 0);printf("%f, %f, %f, %fn", avg.val[0],avg.val[1],avg.val[2],avg.val[3]);double d = 128 - avg.val[0];avg.val[0] = d;cvAddS(H_img, avg, H_img, 0); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// void hand_HSV() {cvCvtColor(src2, hsv_image, CV_BGR2HSV);//cvInRangeS (hsv_image, hsv_min, hsv_max, hsv_mask);//cvShowImage( "hsv_msk", hsv_mask);//方法2: 单独处理各个通道cvSplit(hsv_image,H_img,S_img,V_img,0);//color_blance();//cvMerge(H_img,S_img,V_img,0,hsv_image);//cvShowImage( "色彩平衡后", hsv_image);//cvShowImage( "H通道", H_img);//直方图均衡化(效果更差)//cvEqualizeHist(H_img, H_img);//cvShowImage( "H通道_均衡化", H_img);//自适应//cvAdaptiveThreshold(H_img, H_mask, 30, 0, 0, 3, 5);//cvShowImage( "H", H_img);//cvShowImage( "S", S_img);//cvShowImage( "V", V_img);//色相cvInRangeS(H_img,cvScalar(0,0,0,0),cvScalar(H_low_max,0,0,0),H_mask);//红色区cvInRangeS(H_img,cvScalar(256 - H_high_min,0,0,0),cvScalar(256,0,0,0),H_mask1);//紫色区//饱和度cvInRangeS(S_img,cvScalar(S_low,0,0,0),cvScalar(S_high,0,0,0),S_mask); //中间区//cvInRangeS(S_img,cvScalar(20,0,0,0),cvScalar(100,0,0,0),S_mask1); //低饱和度//亮度cvInRangeS(V_img,cvScalar(V_high,0,0,0),cvScalar(256,0,0,0),V_mask);//高亮区cvInRangeS(V_img,cvScalar(V_low,0,0,0),cvScalar(V_high,0,0,0),V_mask1); //中间区//cvInRangeS(V_img,cvScalar(150,0,0,0),cvScalar(250,0,0,0),V_mask2); //较亮区//红黄, 和蓝紫的混合cvOr(H_mask1, H_mask, H_mask, 0);//消除饱和度过低区域cvAnd(H_mask,S_mask,H_mask,0);//cvShowImage( "饱和度过滤", H_mask);//消去过亮过暗区域cvAnd(H_mask,V_mask1,H_mask,0);//cvShowImage( "亮度过滤", H_mask);//cvShowImage( "hsv_msk", H_mask);//补偿过亮区域if(if_high_light) cvOr(H_mask,V_mask,H_mask,0);//cvShowImage( "补偿高光", H_mask);//cvShowImage( "曝光过度 V", V_mask);//cvShowImage( "曝光补偿", S_mask);//是否补偿曝光过度hsv_mask = H_mask;//cvShowImage( "hsv_msk", H_mask); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// //阀值化 IplImage* thd_src; IplImage* thd_dst1; IplImage* thd_dst2; int thd_max = 255; int thd_val = 100; void inti_threshold() {thd_src = cvCreateImage(sz,IPL_DEPTH_8U,1);thd_dst1 = cvCreateImage(sz,IPL_DEPTH_8U,1);thd_dst2 = cvCreateImage(sz,IPL_DEPTH_8U,1); } void threshold() {cvCvtColor(src1, thd_src, CV_RGB2GRAY);cvAdaptiveThreshold(thd_src, thd_dst1, thd_max, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5);cvThreshold(thd_src, thd_dst2, thd_val, thd_max, CV_THRESH_BINARY);cvShowImage( "阀值前", thd_src);cvShowImage( "阀值化1", thd_dst1);cvCreateTrackbar( "thd_max", "阀值化1", &thd_max, 256, 0);cvShowImage( "阀值化2", thd_dst2);cvCreateTrackbar( "thd_val", "阀值化2", &thd_val, 256, 0); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// void resizeSrc() {double scale = 0.5;//获得图像大小sz = cvGetSize(src);newSize.height = (int)(sz.height * scale);newSize.width = (int)(sz.width * scale);src = cvCreateImage(newSize,IPL_DEPTH_8U,3);cvResize(src, src, CV_INTER_LINEAR); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// IplImage* smooth1; IplImage* smooth2; IplImage* smooth3; IplImage* smooth4; IplImage* smooth5; void reduce_noise() {//cvSmooth(hsv_mask, smooth1, CV_GAUSSIAN, 3, 0, 0, 0);//cvSmooth(hsv_mask, smooth1, CV_MEDIAN, 3, 0, 0, 0);//cvSmooth(smooth1, smooth1, CV_BILATERAL, 3, 0, 0, 0);//cvDilate(hsv_mask, smooth1, 0 ,2);//cvErode(smooth1 ,smoot

相关知识

OpenCV怎么进行宠物识别和行为分析
手势识别与检测(opencv)资源
使用 OpenCV 和 FER 在 Python 中进行实时情绪识别
宠物识别
基于卷积神经网络的宠物识别
基于卷积神经网络的宠物识别 Pet Recognition Based on Convolutional Neural Network
基于深度学习的人脸情绪识别检测系统(VGG、CNN、ResNet)
http://bbs.csdn.net/topics/100036164
977
商业文档写作

网址: 手势识别与检测(opencv)资源 https://m.mcbbbk.com/newsview295708.html

所属分类:萌宠日常
上一篇: 摄影师常见的9种图片格式一一详解
下一篇: 【PS技巧】宠物拍摄的后期处理案