美文网首页
从肤色识别到手势识别

从肤色识别到手势识别

作者: 碧影江白 | 来源:发表于2017-06-10 17:57 被阅读127次

首先附上一段肤色识别的代码

#include <iostream>
#include <vector>

#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/calib3d/calib3d.hpp>

using namespace std;
using namespace cv;



int main()
{
    VideoCapture cap(0);
    if (!cap.isOpened())
    {
        return -1;
    }
    namedWindow("result");
    namedWindow("frame");
    Mat frame;
    Mat result, tmp;
    Mat Y, Cr, Cb;
    vector<Mat> channels;
    bool stop = false;
    cap >> frame;
    while (!stop)
    {

        cap >> frame;                       //读取视频帧
        frame.copyTo(tmp);                  //拷贝备份
        //转换颜色空间并分割颜色通道
        cvtColor(tmp, tmp, CV_BGR2YCrCb);

        //split函数的主要功能是把一个彩色图像分割成3个通道,方便进一步的图像处理
        split(tmp, channels);
        Y = channels.at(0);
        Cr = channels.at(1);
        Cb = channels.at(2);

        result.create(frame.rows, frame.cols, CV_8UC1);

        //遍历图像,将符合阈值范围的像素设置为255,其余为0
        for (int j = 1; j < Y.rows - 1; j++)
        {
            uchar* currentCr = Cr.ptr< uchar>(j);
            uchar* currentCb = Cb.ptr< uchar>(j);
            uchar* current = result.ptr< uchar>(j);
            for (int i = 1; i < Y.cols - 1; i++)
            {
                if ((currentCr[i] > 137) && (currentCr[i] < 175) && (currentCb[i] > 100) && (currentCb[i] < 118))
                    current[i] = 255;
                else
                    current[i] = 0;
            }
        }

        imshow("frame", frame);
        imshow("result", result);

        if (waitKey(30) >= 0)
            stop = true;
    }

    cv::waitKey();
    return 0;
}

代码功能非常简略,归结为从摄像头读出视频帧以后,对每一帧的图片进行肤色检测。
肤色检测的核心内容体现为:针对黄种人的 肤色值范围对每帧图片的三个通道图像进行分离,符合人体颜色的像素点标记为白色,不符合的标记为黑色,这样有利于下一步人手的位置获取和手的姿势获取。


相关文章

  • 从肤色识别到手势识别

    首先附上一段肤色识别的代码 代码功能非常简略,归结为从摄像头读出视频帧以后,对每一帧的图片进行肤色检测。肤色检测的...

  • 手势控制:点击、滑动、平移、捏合、旋转、长按、轻扫

    手势识别器(Gesture Recognizer)用于识别触摸序列并触发响应事件。当手势识别器识别到一个手势或手势...

  • 3.6 iOS手势识别的状态和手势识别器幕后原理

    2.2手势识别的状态和手势识别器幕后原理 (一)手势的状态 (二)离散型手势识别器和连续型手势识别器之间的对比: ...

  • Gesture手势

    手势识别器 手势识别器是对触摸事件做了封装,我们无需自己去判断某个手势是否触发,手势识别器本身起到了识别作用,我们...

  • 手势识别

    手势识别 6种手势识别 在iOS开发中有6中手势识别:点按、捏合、拖动、轻扫、旋转、长按苹果推出手势识别主要是为了...

  • UIGestureRecognizer

    什么是手势识别器? 手势识别器就是对触摸事件做了封装,我们不需要判断某个手势是否触发,手势识别器本身起到了识别作用...

  • 手势——UIGestureRecognizer

    一、简介 UIGestureRecognizer是具体手势识别器的基类。 手势识别器对象(或简单地说是手势识别器)...

  • EasyAR手势姿势识别

    简介 简单试了下EasyAR的手势识别以及姿势识别 手势识别 目前官方是有两种手势 测试了感觉识别度蛮高的 也蛮快...

  • ios多手势传递,用于页面头部悬浮滚动

    /* 是否允许多个手势识别器共同识别,一个控件的手势识别后是否阻断手势识别继续向下传播,默认返回NO;如果为YES...

  • iOS手势识别

    UIGestureRecognizer手势识别器手势识别器是特殊的触摸事件UIGestureRecognizer是...

网友评论

      本文标题:从肤色识别到手势识别

      本文链接:https://www.haomeiwen.com/subject/mohcqxtx.html