求助,opencv3.0 人脸检测运行人脸检测程序出错

opencv3.0+VS2013平台人脸检测MFC
OpenCV3.0+VS2013平台人脸检测MFC
本程序构建于VS2013基本对话框,调用了OPENCV3.0库,可以通过打开摄像头、打开图片,打开视频获取数据文件,再进行检测(最后有效果图),三者数据流之间可以任意切换。几点说明:视频和摄像机的显示和检测用到了定时器;在代码的现实中,图片是显示在控件中,用到CvvImage类,而OPENCV3.0库中没有这个类了,需要自己添加相应cpp和h文件到工程目录中。
实现函数位于Dlg.cpp中,成员变量和位于Dlg.h文件,少量全局变量在Dlg.h中。本文中的代码,网上有很多。本文只是为了展示MFC的框架以及代码的移植实现。
一、程序代码
有注释部分是基本是自己添加部分(下同).
#pragma once
class CMyDlg : public CDialogEx
CMyDlg(CWnd* pParent = NULL);
enum { IDD = IDD_MY_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
IplImage* m_pImg, *m_pImg_=0;
IplImage* m_pRstI
BOOL m_bDrawF
int m_nFileT
float m_fT
Mat m_Frame, m_Frame_;
IplImage m_frame, m_frame_;
Mat m_vFrame, m_vFrame_;
IplImage m_vframe, m_vframe_;
void DrawImageToHDC( IplImage *pImg, UINT nID);
void ClearControlImage(UINT nID);
void face_detect(IplImage * img);
protected:
HICON m_hI
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
// 消息映射函数
afx_msg void OnBnClickedGetCam();
afx_msg void OnBnClickedVideo();
afx_msg void OnBnClickedPicture();
afx_msg void OnTimer(UINT_PTR nIDEvent);
2、Dlg.cpp
这部分,贴出添加的初始化的变量,以及函数实现。代码中有一些解释。 就不进行整体的说明了。
2个cpp类的引用,我放在了stdafx.h中
#include "CvvImage.h"
stdafx.h中用到了宏定义,以避免重复定义:
#ifndef _OPCV_3_0_HEADER_
#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"
(2) 全局变量,构造函数初始化
static CvMemStorage * storage = 0;
static CvHaarClassifierCascade *cascade = 0;
static CvScalar colors[] = {
{ 0, 0, 255 }, { 0, 128, 255 }, { 0, 255, 255 }, { 0, 255, 0 },
{ 255, 128, 0 }, { 255, 255, 0 }, { 255, 0, 0 }, { 255, 0, 255 } };
BOOL bDttFlag = FALSE;
BOOL bPlayOver = FALSE;
下面是构造函数的初始化,消息映射表, 数据交换
CMyDlg(CWnd* pParent ) :
CDialogEx(CMyDlg, pParent)
m_pImg = NULL;
m_pRstImg = NULL;
m_bDrawFlag = NULL;
m_fTime = 0;
m_nNum = 0;
m_nFileType = 0;
const char * cascade_name = "haarcascade_frontalface_alt.xml";
cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name);
if (cascade == NULL)
MessageBox("Load HaarCascade error!\n");
m_hIcon = AfxGetApp()-&LoadIcon(IDR_MAINFRAME);
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_BN_CLICKED(IDC_GETCAM, &CMyDlg)
ON_BN_CLICKED(IDC_PICTURE, &CMyDlg)
ON_BN_CLICKED(IDC_Detect, &CMyDlg)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_Video, &CMyDlg)&span
END_MESSAGE_MAP()
void CMyDlg(CDataExchange* pDX)
CDialogEx(pDX);
DDX_Text(pDX, IDC_TIME, m_fTime);
DDX_Text(pDX, IDC_NUM, m_nNum);
(3) 画图到控件
void CMyDlg::DrawImageToHDC(IplImage * pImg, UINT nID)
CvvImage image
CRect rect
//获取设备上下文
CDC *pDC = GetDlgItem(nID)-&GetDC()
HDC hDC = pDC-&GetSafeHdc()
//获取PictureBox边框
GetDlgItem(nID)-&GetClientRect(&rect)
//防止去除PictureBox的边框
rect.top = rect.top + 1
rect.bottom = rect.bottom - 1
rect.left = rect.left + 1
rect.right = rect.right - 1
//图像基本参数
int nWidth = pImg-&width
int nHeight = pImg-&height
//等比例缩放,防止图像变形
if ((rect.right - rect.left) & nWidth || (rect.bottom - rect.top)&nHeight)
if ((float)nWidth / (float)nHeight&(float)(rect.right - rect.left) / (float)(rect.bottom - rect.top))
rect.bottom = nHeight*(rect.right - rect.left) / nWidth + rect.top
rect.right = nWidth*(rect.bottom - rect.top) / nHeight + rect.left
rect.right = nWidth + rect.left
rect.bottom = nHeight + rect.top
//获取图像,绘制图像设备
image.CopyOf(pImg)
image.DrawToHDC(hDC, &rect)
//释放资源
ReleaseDC(pDC)
image.Destroy()
(4) 清空控件图片
// 实际是用和对话框颜色的图像覆盖对话框
void CMyDlg::ClearControlImage(UINT nID)
CvvImage image
CRect rect
//获取设备上下文
CDC *pDC = GetDlgItem(nID)-&GetDC()
HDC hDC = pDC-&GetSafeHdc()
//获取PictureBox边框
GetDlgItem(nID)-&GetClientRect(&rect)
//创建与图像窗口大小一致的图像
IplImage* pImg = cvCreateImage(cvSize(rect.right - rect.left, rect.bottom - rect.left), IPL_DEPTH_8U, 3)
//设置为背景色,通过取色发现,背景颜色为(240,240,240)
cvSet(pImg, cvScalar(240, 240, 240))
//防止去除PictureBox的边框
rect.top = rect.top + 1
rect.bottom = rect.bottom - 1
rect.left = rect.left + 1
rect.right = rect.right - 1
//获取图像,绘制图像设备
image.CopyOf(pImg)
image.DrawToHDC(hDC, &rect)
//释放资源
ReleaseDC(pDC)
cvReleaseImage(&pImg)
image.Destroy()
(5) 人脸检测子函数
void CMyDlg(IplImage * img)
double scale = 1.3;
IplImage * copyImg = cvCloneImage(img);
IplImage * gray = cvCreateImage(cvSize(copyImg-&width, copyImg-&height), 8, 1);
IplImage * small_img = cvCreateImage(cvSize(cvRound(copyImg-&width / scale), cvRound(copyImg-&height / scale)), 8, 1);
cvCvtColor(copyImg, gray, CV_BGR2GRAY);
cvResize(gray, small_img, CV_INTER_LINEAR);
cvEqualizeHist(small_img, small_img);
cvClearMemStorage(storage);
m_fTime = (float)cvGetTickCount();
CvSeq * faces = cvHaarDetectObjects(small_img, cascade, storage,
1.1, 2, 0, cvSize(30, 30));
m_fTime = (float)cvGetTickCount() - m_fT
m_fTime = (float)(m_fTime / (cvGetTickFrequency() * 1000));
if ( ! (m_nNum = faces-&total)) m_fTime = 0;
for (int i = 0; i & (faces ? faces-&total : 0); i++)
CvRect * r = (CvRect *)cvGetSeqElem(faces, i);
center.x = cvRound((r-&x + r-&width * 0.5) *scale);
center.y = cvRound((r-&y + r-&height * 0.5) *scale);
radius = cvRound((r-&width + r-&height) * 0.25 * scale);
cvCircle(copyImg, center, radius, colors[i % 8], 3, 8, 0);
cvReleaseImage(&m_pRstImg);
m_pRstImg = cvCloneImage(copyImg);
cvReleaseImage(&copyImg);
cvReleaseImage(&gray);
cvReleaseImage(&small_img);
(6) 定时器
void CMyDlg::OnTimer(UINT_PTR nIDEvent)
switch (nIDEvent)
cap && m_F
m_frame = m_F
if (!&m_frame) return;
cvReleaseImage(&m_pImg);
m_pImg = cvCloneImage(&m_frame);
face_detect(m_pImg);
DrawImageToHDC(m_pRstImg, IDC_SHOWPIC);
UpdateData(FALSE);
capture && m_vF
if (m_vFrame.data)
m_vframe = m_vF
cvReleaseImage(&m_pImg);
m_pImg = cvCloneImage(&m_vframe);
face_detect(m_pImg);
DrawImageToHDC(m_pRstImg, IDC_SHOWPIC);
UpdateData(FALSE);
bPlayOver = TRUE;
KillTimer(2);
MessageBox("视频检测结束");
if (m_nFileType == 1)
cap && m_Frame_;
m_frame_ = m_Frame_;
if (!&m_frame_) return;
cvReleaseImage(&m_pImg_);
m_pImg_ = cvCloneImage(&m_frame_);
DrawImageToHDC(m_pImg_, IDC_SHOWPIC);
UpdateData(FALSE);
if (m_nFileType == 2)
capture && m_vFrame_;
if (m_vFrame_.data)
m_vframe_ = m_vFrame_;
cvReleaseImage(&m_pImg_);
m_pImg_ = cvCloneImage(&m_vframe_);
DrawImageToHDC(m_pImg_, IDC_SHOWPIC);
UpdateData(FALSE);
KillTimer(3);
bPlayOver = TRUE;
MessageBox("视频播放结束");
CDialogEx::OnTimer(nIDEvent);
(7) 以下是4个按钮的消息响应函数
摄像头按钮,视频文件按钮,图片文件按钮,检测按钮
void CMyDlg()
ClearControlImage(IDC_SHOWPIC);
m_nNum = 0;
m_fTime = 0;
UpdateData(FALSE);
storage = cvCreateMemStorage(0);
if (capture.isOpened())
KillTimer(3);
capture.release();
if (bDttFlag == TRUE)
KillTimer(2);
bDttFlag = FALSE;
m_nFileType = 1;
if (!cap.isOpened())
cap.open(CV_CAP_ANY);
SetTimer(3, 40, NULL);
void CMyDlg::OnBnClickedVideo()
storage = cvCreateMemStorage(0);
ClearControlImage(IDC_SHOWPIC);
m_nNum = 0; m_fTime = 0; UpdateData(FALSE);
if (cap.isOpened())
KillTimer(3);
cap.release();
if (bDttFlag == TRUE)
KillTimer(1);
bDttFlag = FALSE;
bPlayOver = FALSE;
m_nFileType = 2;
CString FilePathN
const char* AviPathN
if (!capture.isOpened())
CFileDialog FileOpenDlg(TRUE, "", "", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "视频文件(*.*.mp4;*.wmv)|*.*.mp4;*.wmv|所有文件(*.*)|*.*||");
if (FileOpenDlg.DoModal() != IDOK) return;
FilePathName = FileOpenDlg.GetPathName();
AviPathName = FilePathName.GetBuffer(sizeof(FilePathName));
capture = VideoCapture(AviPathName);
SetTimer(3, 40, NULL);
KillTimer(2);
KillTimer(3);
capture.release();
CFileDialog FileOpenDlg(TRUE, "", "", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "视频文件(*.*.mp4;*.wmv)|*.*.mp4;*.wmv|所有文件(*.*)|*.*||");
if (FileOpenDlg.DoModal() != IDOK) return;
FilePathName = FileOpenDlg.GetPathName();
AviPathName = FilePathName.GetBuffer(sizeof(FilePathName));
capture = VideoCapture(AviPathName);
SetTimer(3, 40, NULL);
void CMyDlg()
ClearControlImage(IDC_SHOWPIC);
m_nNum = 0;
m_fTime = 0;
UpdateData(FALSE);
if (cap.isOpened())
KillTimer(3);
cap.release();
if (bDttFlag == TRUE)
KillTimer(1);
if (capture.isOpened())
KillTimer(3);
capture.release();
if (bDttFlag == TRUE)
KillTimer(2);
bDttFlag = FALSE;
storage = cvCreateMemStorage(0);
m_nFileType = 3;
CString ImagePathN
if (m_pImg == NULL)
CFileDialog FileOpenDlg(TRUE, "", "", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"图像文件(*.BMP;*.JPG;*.PNG)|*.BMP;*.JPG;*.PNG|所有文件(*.*)|*.*||");
if (FileOpenDlg.DoModal() != IDOK) return;
ImagePathName = FileOpenDlg.GetPathName();
m_pImg = cvLoadImage(ImagePathName);
m_bDrawFlag = true;
ClearControlImage(IDC_SHOWPIC);
DrawImageToHDC(m_pImg, IDC_SHOWPIC);
CFileDialog FileOpenDlg(TRUE, "", "", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "图像文件(*.BMP;*.JPG;*.PNG)|*.BMP;*.JPG;*.PNG|所有文件(*.*)|*.*||");
if (FileOpenDlg.DoModal() != IDOK) return;
ImagePathName = FileOpenDlg.GetPathName();
cvReleaseImage(&m_pImg);
m_pImg = cvLoadImage(ImagePathName);
ClearControlImage(IDC_SHOWPIC);
DrawImageToHDC(m_pImg, IDC_SHOWPIC);
// 人脸检测按钮
void CMyDlg::OnBnClickedDetect()
KillTimer(3);
bDttFlag = TRUE;
ClearControlImage(IDC_SHOWPIC);
switch (m_nFileType)
if (cap.isOpened())
SetTimer(1, 40, NULL);
MessageBox("摄像机开启失败!");
if (capture.isOpened())
if (!bPlayOver)
SetTimer(2, 40, NULL);
bPlayOver = FALSE;
MessageBox("视频已结束!");
MessageBox("视频读取失败!");
face_detect(m_pImg);
DrawImageToHDC(m_pRstImg, IDC_SHOWPIC);
UpdateData(FALSE);
m_nFileType = 0;
二、程序界面
程序不复杂,就不写整体的总结。要说明的是,这个程序可以在3个按钮实时的进行数据文件选择,所以两两之间逻辑关系,用到了几个标记,需要自己好好梳理流程。视频文件播放没有做成循环,可以在文件读完后从新定位到第一帧,实现请参考opencv代码。定时器取的40ms,对应的帧率问25fps。不同视频文件,播放和检测的画面播放可能较快或者减慢,需要统一视频文件的帧率或者在程序中设定。
附件(CvvImage类):
#include "StdAfx.h"
#include "CvvImage.h"
CV_INLINE RECT NormalizeRect(RECT r);
CV_INLINE RECT NormalizeRect(RECT r) {
if (r.left & r.right){
r.left = r.
if (r.top & r.bottom) {
r.top = r.
r.bottom =
CV_INLINE CvRect RectToCvRect(RECT sr);
CV_INLINE CvRect RectToCvRect(RECT sr) {
sr = NormalizeRect(sr);
return cvRect(sr.left, sr.top, sr.right - sr.left, sr.bottom - sr.top);
CV_INLINE RECT CvRectToRect(CvRect sr);
CV_INLINE RECT CvRectToRect(CvRect sr) {
dr.left = sr.x;
dr.top = sr.y;
dr.right = sr.x + sr.
dr.bottom = sr.y + sr.
CV_INLINE IplROI RectToROI(RECT r);
CV_INLINE IplROI RectToROI(RECT r) {
r = NormalizeRect(r);
roi.xOffset = r.
roi.yOffset = r.
roi.width = r.right - r.
roi.height = r.bottom - r.
roi.coi = 0;
FillBitmapInfo(BITMAPINFO* bmi, int width, int height, int bpp, int origin) {
assert(bmi && width &= 0 && height &= 0 && (bpp == 8 || bpp == 24 || bpp == 32));
BITMAPINFOHEADER* bmih = &(bmi-&bmiHeader);
memset(bmih, 0, sizeof(*bmih));
bmih-&biSize = sizeof(BITMAPINFOHEADER);
bmih-&biWidth =
bmih-&biHeight = origin ? abs(height) : -abs(height);
bmih-&biPlanes = 1;
bmih-&biBitCount = (unsigned short)
bmih-&biCompression = BI_RGB;
if (bpp == 8) {
RGBQUAD* palette = bmi-&bmiC
for (i = 0; i & 256; i++) {
palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed = (BYTE)i;
palette[i].rgbReserved = 0;
CvvImage::CvvImage() { m_img = 0; }
void CvvImage::Destroy() { cvReleaseImage(&m_img); }
CvvImage::~CvvImage() { Destroy(); }
CvvImage::Create(int w, int h, int bpp, int origin) {
const unsigned max_img_size = 10000;
if ((bpp != 8 && bpp != 24 && bpp != 32) || (unsigned)w &= max_img_size || (unsigned)h &= max_img_size ||
(origin != IPL_ORIGIN_TL && origin != IPL_ORIGIN_BL)) {
assert(0);
return false;
if (!m_img || Bpp() != bpp || m_img-&width != w || m_img-&height != h) {
if (m_img && m_img-&nSize == sizeof(IplImage))
Destroy();
m_img = cvCreateImage(cvSize(w, h), IPL_DEPTH_8U, bpp / 8);
if (m_img)
m_img-&origin = origin == 0 ? IPL_ORIGIN_TL : IPL_ORIGIN_BL;
return m_img != 0;
CvvImage::CopyOf(CvvImage& image, int desired_color) {
IplImage* img = image.GetImage();
CopyOf(img, desired_color);
#define HG_IS_IMAGE(img)
((img) != 0 && ((const IplImage*)(img))-&nSize == sizeof(IplImage) && \
((IplImage*)img)-&imageData != 0)
CvvImage::CopyOf(IplImage* img, int desired_color){
if (HG_IS_IMAGE(img))
int color = desired_
CvSize size = cvGetSize(img);
if (color & 0)
color = img-&nChannels & 1;
if (Create(size.width, size.height, (!color ? 1 : img-&nChannels & 1 ? img-&nChannels : 3) * 8, img-&origin)) {
cvConvertImage(img, m_img, 0);
CvvImage::Load(const char* filename, int desired_color){
IplImage* img = cvLoadImage(filename, desired_color);
return false;
CopyOf(img, desired_color);
cvReleaseImage(&img);
return true;
CvvImage::LoadRect(const char* filename, int desired_color, CvRect r){
if (r.width & 0 || r.height & 0) return false;
IplImage* img = cvLoadImage(filename, desired_color);
return false;
if (r.width == 0 || r.height == 0)
r.width = img-&
r.height = img-&
r.x = r.y = 0;
if (r.x & img-&width || r.y & img-&height || r.x + r.width & 0 || r.y + r.height & 0)
cvReleaseImage(&img);
return false;
if (r.x & 0)
r.width += r.x;
if (r.y & 0)
r.height += r.y;
if (r.x + r.width & img-&width)
r.width = img-&width - r.x;
if (r.y + r.height & img-&height)
r.height = img-&height - r.y;
cvSetImageROI(img, r);
CopyOf(img, desired_color);
cvReleaseImage(&img);
return true;
CvvImage::Save(const char* filename){
if (!m_img)
return false;
cvSaveImage(filename, m_img);
return true;
CvvImage::Show(const char* window){
if (m_img)
cvShowImage(window, m_img);
CvvImage::Show(HDC dc, int x, int y, int w, int h, int from_x, int from_y){
if (m_img && m_img-&depth == IPL_DEPTH_8U)
uchar buffer[sizeof(BITMAPINFOHEADER)+1024];
BITMAPINFO* bmi = (BITMAPINFO*)
int bmp_w = m_img-&width, bmp_h = m_img-&
FillBitmapInfo(bmi, bmp_w, bmp_h, Bpp(), m_img-&origin);
from_x = MIN(MAX(from_x, 0), bmp_w - 1);
from_y = MIN(MAX(from_y, 0), bmp_h - 1);
int sw = MAX(MIN(bmp_w - from_x, w), 0);
int sh = MAX(MIN(bmp_h - from_y, h), 0);
SetDIBitsToDevice(
dc, x, y, sw, sh, from_x, from_y, from_y, sh,
m_img-&imageData + from_y*m_img-&widthStep,
bmi, DIB_RGB_COLORS);
CvvImage::DrawToHDC(HDC hDCDst, RECT* pDstRect){
if (pDstRect && m_img && m_img-&depth == IPL_DEPTH_8U && m_img-&imageData)
uchar buffer[sizeof(BITMAPINFOHEADER)+1024];
BITMAPINFO* bmi = (BITMAPINFO*)
int bmp_w = m_img-&width, bmp_h = m_img-&
CvRect roi = cvGetImageROI(m_img);
CvRect dst = RectToCvRect(*pDstRect);
if (roi.width == dst.width && roi.height == dst.height)
Show(hDCDst, dst.x, dst.y, dst.width, dst.height, roi.x, roi.y);
if (roi.width & dst.width)
SetStretchBltMode(hDCDst, HALFTONE);
SetStretchBltMode(hDCDst, COLORONCOLOR);
FillBitmapInfo(bmi, bmp_w, bmp_h, Bpp(), m_img-&origin);
::StretchDIBits(
dst.x, dst.y, dst.width, dst.height,
roi.x, roi.y, roi.width, roi.height,
m_img-&imageData, bmi, DIB_RGB_COLORS, SRCCOPY);
CvvImage::Fill(int color){
cvSet(m_img, cvScalar(color & 255, (color && 8) & 255, (color && 16) & 255, (color && 24) & 255));
#pragma once
#ifndef CVVIMAGE_CLASS_DEF
#define CVVIMAGE_CLASS_DEF
#include "opencv2/opencv.hpp"
CvvImage();
virtual ~CvvImage();
virtual bool
Create(int width, int height, int bits_per_pixel, int image_origin = 0);
virtual bool
Load(const char* filename, int desired_color = 1);
virtual bool
LoadRect(const char* filename,
int desired_color, CvRect r);
#if defined WIN32 || defined _WIN32
virtual bool
LoadRect(const char* filename,
int desired_color, RECT r)
return LoadRect(filename, desired_color,
cvRect(r.left, r.top, r.right - r.left, r.bottom - r.top));
virtual bool
Save(const char* filename);
virtual void
CopyOf(CvvImage& image, int desired_color = -1);
virtual void
CopyOf(IplImage* img, int desired_color = -1);
IplImage* GetImage() { return m_ };
virtual void
Destroy(void);
int Width() { return !m_img ? 0 : !m_img-&roi ? m_img-&width : m_img-&roi-& };
int Height() { return !m_img ? 0 : !m_img-&roi ? m_img-&height : m_img-&roi-& };
int Bpp() { return m_img ? (m_img-&depth & 255)*m_img-&nChannels : 0; };
virtual void
Fill(int color);
virtual void
Show(const char* window);
#if defined WIN32 || defined _WIN32
virtual void
Show(HDC dc, int x, int y, int width, int height, int from_x = 0, int from_y = 0);
virtual void
DrawToHDC(HDC hDCDst, RECT* pDstRect);
protected:
namespace cv
typedef CvvImage CI
完整的工程文件打包(包含了最初的控制台程序)。(其他opencv版本,修改引用和添加依赖库,重新编译即可)
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?&>&&>&&>&&>&OPENCV人脸检测例子程序(可直接运行)
OPENCV人脸检测例子程序(可直接运行)
上传大小:48KB
OPENCV 自带人脸识别程序,可直接运行,有说程序说明,和OPENCV编译环境和设置
嵌到我的页面
<input type="text" value="">
综合评分:4.3(46位用户评分)
收藏((6))
所需积分:0
下载次数:784
审核通过送C币
创建者:zzfsjz
创建者:csupport
创建者:qingfeng812
课程推荐相关知识库
上传者其他资源上传者专辑
信息化热门标签
VIP会员动态
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
OPENCV人脸检测例子程序(可直接运行)
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
cherry_pig3
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:face 基于opencv3.0 的人脸识别例子程序 Graph Recognize 图形/文字
251万源代码下载-
&文件名称: face& & [
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 2221 KB
&&上传时间:
&&下载次数: 55
&&提 供 者:
&详细说明:基于opencv3.0 的人脸识别例子程序
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&face\CMakeLists.txt&&....\data\cascades\haarcascade_mcs_eyepair_big.xml&&....\....\........\haarcascade_mcs_eyepair_small.xml&&....\....\........\haarcascade_mcs_leftear.xml&&....\....\........\haarcascade_mcs_lefteye.xml&&....\....\........\haarcascade_mcs_lefteye_alt.xml&&....\....\........\haarcascade_mcs_mouth.xml&&....\....\........\haarcascade_mcs_nose.xml&&....\....\........\haarcascade_mcs_rightear.xml&&....\....\........\haarcascade_mcs_righteye.xml&&....\....\........\haarcascade_mcs_righteye_alt.xml&&....\....\........\haarcascade_mcs_upperbody.xml&&....\.oc\changelog.markdown&&....\...\etc\at.txt&&....\...\face.bib&&....\...\src\facerec_demo.cpp&&....\include\opencv2\face\facerec.hpp&&....\.......\.......\face.hpp&&....\README.md&&....\samples\etc\at.txt&&....\.......\facerec_at_t.txt&&....\.......\facerec_demo.cpp&&....\.......\src\CMakeLists.txt&&....\.......\...\create_csv.py&&....\.......\...\crop_face.py&&....\.......\...\facerec_demo.cpp&&....\.......\...\facerec_eigenfaces.cpp&&....\.......\...\facerec_fisherfaces.cpp&&....\.......\...\facerec_lbph.cpp&&....\.......\...\facerec_save_load.cpp&&....\.......\...\facerec_video.cpp&&....\.rc\eigen_faces.cpp&&....\...\facerec.cpp&&....\...\face_basic.hpp&&....\...\fisher_faces.cpp&&....\...\lbph_faces.cpp&&....\...\precomp.hpp&&....\tutorials\facerec_video\facerec_video.png&&....\.........\face_tutorial.markdown&&....\.........\gender_classification\arnie_10_10_200_200.jpg&&....\.........\.....................\arnie_20_20_200_200.jpg&&....\.........\.....................\arnie_20_20_70_70.jpg&&....\.........\.....................\arnie_30_30_200_200.jpg&&....\.........\.....................\clooney_set.png&&....\.........\.....................\fisherface_0.png&&....\.........\.....................\fisherface_reconstruction_0.png&&....\.........\.....................\mean.png&&....\.........\img\at_database_small_sample_size.png&&....\.........\...\eigenfaces_opencv.png&&....\.........\...\eigenface_reconstruction_opencv.png&&....\.........\...\fisherfaces_opencv.png&&....\.........\...\fisherface_reconstruction_opencv.png&&....\.........\...\lbp\lbp.png&&....\.........\...\...\lbp_yale.jpg&&....\.........\...\...\patterns.png&&....\include\opencv2\face&&....\tutorials\img\lbp&&....\data\cascades&&....\.oc\etc&&....\...\src&&....\include\opencv2&&....\samples\etc&&....\.......\src&&....\tutorials\facerec_video&&....\.........\gender_classification&&....\.........\img&&....\data&&....\doc&&....\include&&....\samples&&....\src&&....\tutorials&&face
&[]:和说明完全不符
&近期下载过的用户:
&&&&&&&&&&&&&&&&&&&&&[]
&输入关键字,在本站251万海量源码库中尽情搜索:
&[] - 人脸识别技术资料和源码(包含人脸库)( 06:51:13) 转载标签: 杂谈 人脸识别技术资料和源码(包含人脸库)
&[] - 小弟找的小四轴飞行器的全套资料,包括原理图,PCB ,源程序 ,希望能对爱好DIY飞行的有点帮助
&[] - 简单的适用于C++的MVC框架,实现操作接口,模块接口,逻辑接口,事件转发,观察者等
&[] - opencv摄像头人脸识别,也包括图片的人脸识别
&[] - 本课题的主要内容是图像预处理,它主要从摄像头中获取人脸图像然后进行处理,以便提高定位和识别的准确率.该模块主要包含光线补偿、图像灰度化、高斯平滑、均衡直方图、图像对比度增强,图像预处理模块在整个系统中起着极其关键的作用,图像处理的好坏直接影响着后面的定位和识别工作,内有源代码和全部论文资料
&[] - 使用C#语言,VisualStudio2013开发环境,EmguCV(OpenCV)完成双目视觉的标定匹配和三维矫正,可以生成深度图
&[] - 可实现多个人脸识别实验,特别适合高校科研和研究所实验,用来做学术等,也欢迎大家进行改进 谢谢
&[] - 人脸识别系统源码,可以进行二次开发,新手学习的好资源
&[] - 本代码是毛星云所编的《opencv3编程入门》的源码,是基于最新opencv3.0的,可以在vs2013上配套使用,涵盖了基本库函数的使用,共用十章例程,是一个不错的入门资料。
&[] - opencv人脸识别(VC代码),经验证,可以正确编译运行

我要回帖

更多关于 opencv3.0 人脸识别 的文章

 

随机推荐