OpenCV结合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)
  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值