文档章节

qml+opencv(二)

首席吹牛官
 首席吹牛官
发布于 2015/05/22 12:56
字数 308
阅读 48
收藏 0

实现人脸检测。opencv提供了Haar分类器,其在data文件下还提供了训练的数据,所以实现这个不是很难。
我继承OpenCVaction,实现了人脸检测的算法。

#ifndef OPENCVFACEDETECTACTION_H
#define OPENCVFACEDETECTACTION_H
#include "opencvaction.h"
 class OpenCVfaceDetectAction : public OpenCVaction { Q_OBJECT public: OpenCVfaceDetectAction(QObject *parent = 0); ~OpenCVfaceDetectAction(); void action(IplImage *imgin, IplImage *&imgout); signals: void a(); private: CvHaarClassifierCascade* m_cascade; CvMemStorage* m_storage; double m_scale; }; #endif // OPENCVFACEDETECTACTION_H #include "opencvfacedetectaction.h" #include <QDebug> const char* cascade_name = "data/haarcascade_frontalface_alt.xml"; OpenCVfaceDetectAction::OpenCVfaceDetectAction(QObject *parent): OpenCVaction(parent), m_cascade(NULL), m_storage(NULL), m_scale(1.3) { m_cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name, 0, 0, 0); if (!m_cascade) { qDebug() << "load Cascade fail!"; } m_storage = cvCreateMemStorage(0); } OpenCVfaceDetectAction::~OpenCVfaceDetectAction() { if (m_cascade) { cvReleaseHaarClassifierCascade(&m_cascade); } cvReleaseMemStorage(&m_storage); } void OpenCVfaceDetectAction::action(IplImage *imgin, IplImage *&imgout) { imgout = cvCloneImage(imgin); if (!m_cascade) { qDebug() << "Cascade is invaild!"; return; } static CvScalar color = CV_RGB(255, 255, 255); //Image Preparation // IplImage* gray = cvCreateImage(cvGetSize(imgin), 8, 1); IplImage* small_img = cvCreateImage(cvSize(cvRound(imgin->width / m_scale), cvRound(imgin->height / m_scale)), 8, 1); cvCvtColor(imgin, gray, CV_BGR2GRAY); cvResize(gray, small_img, CV_INTER_LINEAR); cvEqualizeHist(small_img, small_img); //直方图均衡 //Detect objects if any // cvClearMemStorage(m_storage); double t = (double)cvGetTickCount(); CvSeq *objects = cvHaarDetectObjects(small_img, m_cascade, m_storage, 1.1, 2, 0, cvSize(50,50)); t = (double)cvGetTickCount() - t; qDebug() << "detection time =" << t / ((double)cvGetTickFrequency()*1000.) << "ms"; //Loop through found objects and draw boxes around them for(int i=0; i < (objects ? objects->total : 0); ++i) { CvRect* r = (CvRect*)cvGetSeqElem(objects, i); cvRectangle(imgout, cvPoint(r->x * m_scale, r->y * m_scale), cvPoint((r->x + r->width) * m_scale, (r->y + r->height) * m_scale), color, 2, CV_AA); } cvReleaseImage(&gray); cvReleaseImage(&small_img); emit a(); } 

在OpenCVshowFrame中,添加下面

 OpenCVfaceDetectAction *f = new OpenCVfaceDetectAction(); m_actions.push_back(f);

就ok了。
运行效果如下:
这里写图片描述

© 著作权归作者所有

首席吹牛官
粉丝 9
博文 368
码字总数 191938
作品 0
闵行
程序员
私信 提问
qml+opencv(一)

前言 突然想起opencv,一直想做人脸识别,可是理论基础太水,只能慢慢来,去年学习了一会,然后公司让我去搞app和网络,就一直搁着,现在学习qml,突然想能不能在qml里面使用opencv,所以就有...

首席吹牛官
2015/05/22
1K
0
自己动手实现java数据结构(六)二叉搜索树

1.二叉搜索树介绍   前面我们已经介绍过了向量和链表。有序向量可以以二分查找的方式高效的查找特定元素,而缺点是插入删除的效率较低(需要整体移动内部元素);链表的优点在于插入,删除元...

小熊餐馆
01/24
0
0
【javascript实现】几道题目带你学习二叉搜索树

二叉树大家都知道,二叉搜索树满足以下特征: 节点的左子树只包含小于当前节点的数 节点的右子树只包含大于当前节点的数 所有左子树和右子树自身必须也是二叉搜索树 二叉搜索树也叫二叉排序树...

陈小俊
2018/11/27
0
0
站长朋友目前大家用的关键词分类管理用的什么辅助工具

站长朋友目前大家用的关键词分类管理用的什么辅助工具 PHP 或 ASP 都是可以的 我要的功能是 手上操作的关键词 可以轻松做统计 监控 分析..有些客户关系管理系统貌似有这种概念 但不好操作 有...

黄衣
2011/09/05
156
0
二叉排序树(Binary Sort Tree)

1、定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: ① 若它的左子树非空,则左子树上所有...

野渡书生
2016/04/28
184
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
9
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
964
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部