结果展示:
主要思路:
1.利用照片或相机获取照片
2.对照片进行高斯处理org.opencv.imgproc.Imgproc.GaussianBlur
3.进行肤色处理private void skinExtract
4.寻找手轮廓Imgproc.findContours
5.通过矢量叉乘与点乘判断指尖 (也可以根据重心)
主要代码:
肤色识别:
privatevoidskinExtract(Mat frame, Mat skinArea) {
// TODOAuto-generated method stub
MatYCbCr = new Mat();
// Vector<Mat> planes =new Vector<Mat>();
//转换为YCrCb颜色空间
Imgproc.cvtColor(frame, YCbCr,Imgproc.COLOR_RGB2YCrCb);
//将多通道图像分离为多个单通道图像
//org.opencv.core.Core.split(YCbCr, planes);
doublebuf1[]=newdouble[3];
double buf2[]=newdouble[3];
doublebuf3[]={255,255,255};
doublebuf4[]={0,0,0};
for(inti=0;i<YCbCr.rows();i++){
for(intj=0;j<YCbCr.cols();j++){
buf1=YCbCr.get(i,j);
if(buf1[1]>=133&& buf1[1]<=173 && 77<=buf1[2] && buf1[2]<=127)
skinArea.put(i,j, buf3);