人臉識別程序源代碼_第1頁
人臉識別程序源代碼_第2頁
人臉識別程序源代碼_第3頁
人臉識別程序源代碼_第4頁
人臉識別程序源代碼_第5頁
已閱讀5頁,還剩2頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上1利用OpenCV進行人臉檢測人臉檢測程序主要完成3部分功能,即加載分類器、加載待檢測圖象以及檢測并標示。本程序使用OpenCV中提供的“haarcascade_frontalface_alt.xml”文件存儲的目標檢測分類,用cvLoad函數載入后,進行強制類型轉換。OpenCV中提供的用于檢測圖像中目標的函數是cvHaarDetectObjects,該函數使用指針對某目標物體(如人臉)訓練的級聯分類器在圖象中找到包含目標物體的矩形區域,并將這些區域作為一序列的矩形框返回。分類器在使用后需要被顯式釋放,所用的函數為cvReleaseHaarClassifierCas

2、cade。這些函數原型請參看有關OpenCV手冊。2程序實現1)新建一個Visual C+ MFC項目,取名為“FaceDetection”,選擇應用程序類型為“單文檔”。將菜單中多余的項去掉,并添加一項“人臉檢測”,其ID為“ID_FaceDetected”,并生成該菜單項的消息映射函數。2)在“FaceDetectionView.h”頭文件中添加以下灰底色部分程序代碼:/南京森林公安高等??茖W校 江林升/ FaceDetectionView.h : CFaceDetectionView 類的接口#pragma once#include "cv.h"#include &q

3、uot;highgui.h"class CFaceDetectionView : public CViewprotected: / 僅從序列化創建 CFaceDetectionView(); DECLARE_DYNCREATE(CFaceDetectionView)/ 屬性public: CFaceDetectionDoc* GetDocument() const; CvHaarClassifierCascade* cascade;/特征器分類 CvMemStorage* storage; void detect_and_draw( IplImage* img ); IplImage

4、* src; /載入的圖像3)在“FaceDetectionView.cpp”文件中添加以下灰底色部分程序代碼:/ FaceDetectionView.cpp : CFaceDetectionView 類的實現#include "stdafx.h"#include "FaceDetection.h"#include "FaceDetectionDoc.h"#include "FaceDetectionView.h"#include <string>#ifdef _DEBUG#define new DEB

5、UG_NEW#endif/ CFaceDetectionViewIMPLEMENT_DYNCREATE(CFaceDetectionView, CView)BEGIN_MESSAGE_MAP(CFaceDetectionView, CView) ON_COMMAND(ID_FaceDetected, &CFaceDetectionView:OnFacedetected)END_MESSAGE_MAP()/ CFaceDetectionView 構造/析構const char* cascade_name ="haarcascade_frontalface_alt.xml&quo

6、t;/分類器的名稱/ CFaceDetectionView 消息處理程序void CFaceDetectionView:OnFacedetected() /人臉檢測菜單響應事件 / TODO: 在此添加命令處理程序代碼 CString fileName; /打開文件對話窗口 CFileDialog OpenDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR, L"圖像文件格式JPG file format (*.jpg)|*.jpg|(*.bmp) |*.bmp|",

7、 NULL); /從文件對話窗口中打開圖像 if(OpenDlg.DoModal()!=IDOK) return; /獲得文件名 fileName = OpenDlg.GetPathName(); /必要的類型轉換 std:string tempName = (LPCSTR)CStringA(fileName); const char* tmp = tempName.c_str(); /打開文件,若失敗則返回 if( (src = cvLoadImage(tmp, CV_LOAD_IMAGE_ANYCOLOR) = 0 ) return; /加載(分類器層疊)訓練庫 cascade = (Cv

8、HaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); /加載不成功則顯示錯誤訊息,并退出 if(cascade) storage = cvCreateMemStorage(0); cvNamedWindow( "人臉檢測", CV_WINDOW_AUTOSIZE ); /創建窗口 /如果圖片存在則分析并顯示結果,否則退出程序 if(src) detect_and_draw(src); /調用人臉檢與標示事件 cvReleaseImage(&src); cvReleaseMemStorage( &sto

9、rage ); else &, nbsp; AfxMessageBox(L"無法加載分類器,請確認后重試!"); cvReleaseHaarClassifierCascade( &cascade );void CFaceDetectionView:detect_and_draw(IplImage *img) /人臉檢與標示事件 static CvScalar color = 0,0,255;/用于設置標示圖像中人臉的顏色 double scale = 1.3; IplImage* gray = cvCreateImage( cvSize(img->wi

10、dth,img->height), 8, 1 ); IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),cvRound (img->height/scale),8,1 ); int i; cvCvtColor( img, gray, CV_BGR2GRAY ); cvResize( gray, small_img, CV_INTER_LINEAR ); cvEqualizeHist( small_img, small_img ); cvClearMemStorage( storage

11、); if( cascade ) /檢測人臉 CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0, cvSize(30, 30) ); for( i = 0; i < (faces ? faces->total : 0); i+ ) CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); CvPoint center; int radius; center.x = cvRound(r->x + r->width*0.5)*scale);

12、 center.y = cvRound(r->y + r->height*0.5)*scale); radius = cvRound(r->width + r->height)*0.25*scale); cvCircle( img, center, radius, color0, 3, 8, 0 ); cvShowImage( "人臉檢測", img ); cvReleaseImage( &gray ); cvReleaseImage( &small_img );需要注意的是,本程序運行時應將分類器文件置于程序目錄下,如果運行的是生成的EXE文件,則

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論