当前位置:   article > 正文

OpenCV结合V4l2实现人脸检测_v4l2支持人脸识别么

v4l2支持人脸识别么

之前简答得实现了一下人脸检测,不过使用的opencv自带的摄像头操作函数,然而那个并不能使用在嵌入式设备上,为了通用性,我将让opencv使用v4l2获得的数据帧进行检测。

说明
v4l2其实并不难,只不过大家容易被网上那动辄几百行的代码唬住,那些代码大多都是在检错,因为操作硬件这种事情出错的概率确实很高,每一步都可能出错,但是核心的语句也就那几行,这里推荐这几篇文章(点我跳转),我都已经仔细读过,含金量比较高,当然英语好直接都自带文档也是极好的。
opencv与v4l2结合的问题就是数据格式,因为我使用的是Qt,v4l2获得的数据帧会转换为QImage类型,OpenCV则主要使用Mat类型,不过不用担心,简单转换一下就可以了,这篇文章给出了转换方式,由于是一个工程,所以只上OpenCV部分的代码了。

代码
需要下载整个项目的(点我下载

#include "facedetect.h"

FaceDetect::FaceDetect()
{
    this->tryflip = false;
    this->cascade.load("/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml");
    this->nestedCascade.load("/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml");
    this->scale = 1.5;
}




void FaceDetect::setMatImageFromQImage(QImage img)
{
    this->image = QImage2cvMat(img).clone();
}

QImage FaceDetect::getQImage()
{
    return cvMat2QImage(detectAndDraw(image, cascade, nestedCascade, scale, tryflip));
}

QImage FaceDetect::cvMat2QImage(const cv::Mat& mat)
{
    // 8-bits unsigned, NO. OF CHANNELS = 1
    if(mat.type() == CV_8UC1)
    {
        QImage image(mat.cols, mat.rows, QImage::Format_Indexed8);
        // Set the color table (used to translate colour indexes to qRgb values)
        //printf("set colors\n");
        image.setNumColors(256);
        for(int i = 0; i < 256; i++)
        {
            image.setColor(i, qRgb(i, i, i)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/119873
推荐阅读
相关标签
  

闽ICP备14008679号