⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opencv_dialogdlg.cpp

📁 front,profileface detect and head and shouder detect in webcam
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// OpenCV_dialogDlg.cpp : implementation file
//
//  OpenCV 狼 cvcam 阑 捞侩窍咯 墨皋扼甫 涝仿 罐篮 康惑阑 Dialog 俊 焊咯林绰 家胶内靛 涝聪促.
//  磊技茄 汲疙捞唱 扁鸥 巩狼荤亲篮 酒贰 荤捞飘甫 规巩秦 林技夸.
//
//  - 2005. 11. 21. Dong-Chul Kim
//    http://www.opencv.co.kr
//    http://www.t9t9.com

#include "stdafx.h"
#include "OpenCV_dialog.h"
#include "OpenCV_dialogDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define OPENCV_ROOT  "C:/Program Files/OpenCV"

#define FUN		1

bool m_bCamStart = false;		// 姆 矫累 咯何
int m_Mode = 0;					// 贸府 葛靛
#define BLUE RGB(0,0,255);
#define RED RGB(255,0,0);
#define YELLOW RGB(255,255,0);
#define GREEN RGB(0,255,0);
#define WHITE RGB(255,255,255);
int m_nWidth;	COLORREF m_crPen;
COLORREF m_crBrush;
CvFont* font = 0;
static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;
void callback(IplImage* image);
//const char* cascade_name ="haarcascade_frontalface_alt2.xml";//"haarcascade_upperbody.xml ";// "haarcascade_frontalface_alt2.xml";
IplImage *frame,*frame_three, *frame_copy = 0;
  CvCapture* capture = 0;
CvPoint pt1, pt2;
int p=0; 
 CvFont font2;
/////////////////////////////////////////////////////////////////////////////
// COpenCV_dialogDlg dialog

COpenCV_dialogDlg::COpenCV_dialogDlg(CWnd* pParent /*=NULL*/)
	: CDialog(COpenCV_dialogDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(COpenCV_dialogDlg)
	m_nSettingBaud = -1;
	m_nSettingPort = -1;
	m_EditData = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void COpenCV_dialogDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COpenCV_dialogDlg)
	DDX_Control(pDX, IDC_BUTTON_THRESHOLD, m_BtnThreshold);
	DDX_CBIndex(pDX, IDC_BAUDRATE, m_nSettingBaud);
	DDX_CBIndex(pDX, IDC_PORT, m_nSettingPort);
	DDX_Text(pDX, IDC_EDIT1, m_EditData);
	//}}AFX_DATA_MAP
}

/*BEGIN_MESSAGE_MAP(COpenCV_dialogDlg, CDialog)
	//{{AFX_MSG_MAP(COpenCV_dialogDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_BUTTON_THRESHOLD, OnButtonThreshold)
	ON_BN_CLICKED(IDC_CHECK_COMM, OnCheckComm)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_TRANSMIT, OnTransmit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()*///////////////////////////////////////////////
BEGIN_MESSAGE_MAP(COpenCV_dialogDlg, CDialog)
	//{{AFX_MSG_MAP(CCamTestDlg)
//	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CHECK_COMM, OnCheckComm)
//	ON_BN_CLICKED(IDC_CLEAR, OnClear)
	ON_BN_CLICKED(IDC_TRANSMIT, OnTransmit)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_RECEIVEDATA, OnReceiveData)
	//Comport俊辑 单捞磐啊荐脚登菌阑锭 dlg 努贰胶俊 皋矫瘤甫 焊郴柯促.
	ON_WM_TIMER()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COpenCV_dialogDlg message handlers

BOOL COpenCV_dialogDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	SetTimer(1,33,NULL);
	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
//***********************************************************
	//烹脚檬扁拳
//***********************************************************

	// TODO: Add extra initialization here
	g_Comm.SetHwnd(this->m_hWnd);//矫府倔烹脚阑窍扁困秦辑
	LoadSettings();//夸巴档
	UpdateData(FALSE);//夸巴傈俊 悸泼蔼 啊廉促嘿捞扁困秦
//***********************************************************

	// 1. 刚历 墨皋扼俊 措茄 加己阑 沥狼钦聪促 び 啊肺 辨捞, 技肺辨捞, 檬寸 橇饭烙 殿
	int nselected = cvcamGetCamerasCount(); 
	cvcamSetProperty(0, CVCAM_PROP_ENABLE, &nselected);

	m_ButtonWidth = 120;
	m_Width =640; //352;
	m_Height =420; //288;

	cvcamSetProperty(0, CVCAM_PROP_WINDOW, &(this->m_hWnd)); 
	cvcamSetProperty(0, CVCAM_RNDWIDTH, &m_Width);		// 墨皋扼 涝仿 荤捞令 呈厚
	cvcamSetProperty(0, CVCAM_RNDHEIGHT, &m_Height);		// 墨皋扼 涝仿 荤捞令 臭捞
	storage = cvCreateMemStorage(0);
   
//	cascade = (CvHaarClassifierCascade*)cvLoad((cascade_name), 0, 0, 0 );

	// 墨皋扼 加己 沥狼矫俊 妮归 窃荐甫 沥狼窍匙夸~~ 老窜 墨皋扼俊辑 傈崔登绰 窃荐甫 沥狼窍绰 巴涝聪促
	cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback);	// frame 付促 龋免瞪 窃荐
	
	// 2. 墨皋扼甫 檬扁拳窍绊 矫累钦聪促
	cvcamInit( );
	cvcamStart( );	

	// 3. 扩档快甫 咯矾俺 积己钦聪促
	//MoveWindow( 0, 0, m_Width + m_ButtonWidth, m_Height+24, true );

	//m_bCamStart = true;
	//m_BtnThreshold.MoveWindow(m_Width + 10, 10, 100, 25, true);
//	cvNamedWindow( "sss", 1 );
//		cvNamedWindow( "ssss", 1 );
//		cvNamedWindow( "sssss", 1 );
		Check=false;

	return TRUE;  // return TRUE  unless you set the focus to a control


}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void COpenCV_dialogDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
        CClientDC dc(this);
	    dc.Ellipse(0,430,640,1070);
		dc.Ellipse(160,590,480,910);
	
       	CPen pen,*pOldP;
		pen.CreatePen(PS_SOLID,m_nWidth,m_crPen);
		pOldP=dc.SelectObject(&pen);
		
		dc.MoveTo(320,700);
        dc.LineTo(43,540);
		dc.MoveTo(320,700);
        dc.LineTo(160,423);
        dc.MoveTo(320,700);
        dc.LineTo(320,430);
        dc.MoveTo(320,700);
        dc.LineTo(480,423);
        dc.MoveTo(320,700);
        dc.LineTo(597,540);
        dc.MoveTo(0,700);
        dc.LineTo(640,700);	
}
// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR COpenCV_dialogDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

BOOL COpenCV_dialogDlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class

	// 扩档快啊 辆丰 瞪锭 墨皋扼档 辆丰
	cvcamStop( );
	cvcamExit( );
	
	return CDialog::DestroyWindow();
}

void COpenCV_dialogDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);

	m_Width = cx-m_ButtonWidth;
	m_Height = cy;
	
	// TODO: Add your message handler code here
	if(m_bCamStart){
		cvcamSetProperty(0, CVCAM_RNDWIDTH, &m_Width);
		cvcamSetProperty(0, CVCAM_RNDHEIGHT, &m_Height);

		m_BtnThreshold.MoveWindow(m_Width + 10, 10, 100, 25, true);

	}
}



void callback(IplImage* img)
{		
	

	
	
	IplImage *kkk=0;
			int i;
//			int j;

			int scale = 1;
  //  CvSize size=cvSize(50,50);
    CvRect* r = 0;
    CvRect*pFaceRect=0;
	IplImage*pFaceImg=0;
	//IplImage*pFaceImg2=0;
	//IplImage*pCloneImg=0;
	
   
			// 4. 捞固瘤甫 历厘且 傍埃阑 积己窍绊夸
			if( !frame_copy )
				frame_copy = cvCreateImage( cvSize(img->width,img->height),

														IPL_DEPTH_8U, img->nChannels );
                    //cvCopy(img,frame_copy);
					//frame_copy->origin=img->origin;

			// 5. 捞固瘤甫 肯傈洒 第笼绢 促弗 frame_copy 扼绰 镑俊 历厘钦聪促... 
			// 捞固瘤啊 芭曹肺 历厘登绢 乐扁 锭巩
			
			cvFlip(img,frame_copy);
p=p+1;
if ((p%3)==0)//FRONTALFACE
{
 const char* cascade_name ="haarcascade_frontalface_alt2.xml";//"haarcascade_upperbody.xml ";
	cascade = (CvHaarClassifierCascade*)cvLoad((cascade_name), 0, 0, 0 );	 
 p=0;


 if( cascade )
    {
		// 6. cvHaarDetectObjects 窃荐甫 龋免秦辑 倔奔阑 棱酒忱聪促... 
		// 倔奔阑 器窃窍绊 乐绰 荤阿屈阑 倒妨林绰 巴 鞍匙夸.. 
		// 俊瘤啊 呈公 腹篮 版快客 利篮 版快俊 倔奔 捞固瘤甫 肋给 眠免窍绰 巴阑 规瘤窍档废 HAAR_DO_CANNY_PRUNING 可记阑 凛聪促.
		// 捞巴篮 俊瘤啊 利芭唱 腹篮 版快 捞甫 秦搬窍扁 纳聪 肺流阑 荤侩窍扁俊 困狼 捞抚阑 荤侩茄促绊 登绢 乐匙夸 
		// 啊快胶 胶公爹 + 家骇 俊瘤 眠免捞 纳聪 扁过涝聪促
        CvSeq* faces = cvHaarDetectObjects( frame_copy, cascade,storage,
                                            1.1, 6, CV_HAAR_DO_CANNY_PRUNING,
                                            cvSize(10, 10) );
		       
			// 倔奔俊 荤阿屈阑 弊妨林绊夸
			for( i = 0; i < (faces ? faces->total : 0); i++ )
				{
					CvRect* r = (CvRect*)cvGetSeqElem( faces, i );  //倔奔俊 荤阿屈 弊妨林扁 备泅
					pt1.x = r->x*scale;
					pt2.x = (r->x+r->width)*scale;
					pt1.y = r->y*scale;
					pt2.y = (r->y+r->height)*scale;
					cvRectangle( frame_copy, pt1, pt2, CV_RGB(255,255,0), 3, 8, 0 );
				// 7. 硅凯俊 弊覆捞 沥惑栏肺 历厘登绢 乐绰 包拌肺 捞甫 拳搁 惑俊 免仿窍扁 困秦辑绰 促矫 第笼绢 林绢具摆烈 
				
				  ////////////////////////////////////////////////////////////////
           	cvFlip(img,img);
         	cvRectangle( img, pt1, pt2, CV_RGB(255,255,0), 3, 8, 0 ); 
		 
				
            //cvFlip(img,img);	  
	       
			
		
  		   	pFaceRect=(CvRect*)cvGetSeqElem(faces,i);
		     int width=abs(pt2.x-pt1.x);
			 int height =abs(pt2.y-pt1.y);
				
	
			//pCloneImg=cvCloneImage(img);
		
		///	cvSetImageROI(img,*pFaceRect);
         //cvFlip(img,img);
          // 	pFaceImg=
			//	cvCreateImage(size,img->depth,img->nChannels);
           	
		//	cvResize(img,pFaceImg,CV_INTER_AREA); 
		    //cvFlip(pFaceImg,pFaceImg);
		//	cvSaveImage("face.jpg",pFaceImg);
			
			cvResetImageROI(img);
			cvReleaseImage(&pFaceImg);
            cvReleaseImage(&frame_copy);
			//////////////////////////////////////////////////////
			 cvFlip(img,img);
	       //cvFlip(img,img);
            cvInitFont(&font2, CV_FONT_HERSHEY_SIMPLEX, 0.6, 0.6, 0, 2);
	        cvPutText(img,"FRONTFACE", cvPoint(10,10), &font2, CV_RGB(255,255,0));//cvScalar(0, 0, 300));
				}
			}
//cvReleaseImage( &gray );  
//cvReleaseMemStorage(&storage);  
cvReleaseHaarClassifierCascade(&cascade); 
 

}
if ((p%3)==1)
{
 const char* cascade_name ="haarcascade_upperbody.xml ";
	cascade = (CvHaarClassifierCascade*)cvLoad((cascade_name), 0, 0, 0 );	 

 if( cascade )//UPPERBODY
    {
		// 6. cvHaarDetectObjects 窃荐甫 龋免秦辑 倔奔阑 棱酒忱聪促... 
		// 倔奔阑 器窃窍绊 乐绰 荤阿屈阑 倒妨林绰 巴 鞍匙夸.. 
		// 俊瘤啊 呈公 腹篮 版快客 利篮 版快俊 倔奔 捞固瘤甫 肋给 眠免窍绰 巴阑 规瘤窍档废 HAAR_DO_CANNY_PRUNING 可记阑 凛聪促.
		// 捞巴篮 俊瘤啊 利芭唱 腹篮 版快 捞甫 秦搬窍扁 纳聪 肺流阑 荤侩窍扁俊 困狼 捞抚阑 荤侩茄促绊 登绢 乐匙夸 
		// 啊快胶 胶公爹 + 家骇 俊瘤 眠免捞 纳聪 扁过涝聪促
        CvSeq* faces = cvHaarDetectObjects( frame_copy, cascade,storage,
                                            1.1, 6, CV_HAAR_DO_CANNY_PRUNING,
                                            cvSize(10, 10) );
		       
			// 倔奔俊 荤阿屈阑 弊妨林绊夸
			for( i = 0; i < (faces ? faces->total : 0); i++ )
				{
					CvRect* r = (CvRect*)cvGetSeqElem( faces, i );  //倔奔俊 荤阿屈 弊妨林扁 备泅
					pt1.x = r->x*scale;
					pt2.x = (r->x+r->width)*scale;
					pt1.y = r->y*scale;
					pt2.y = (r->y+r->height)*scale;
					cvRectangle( frame_copy, pt1, pt2, CV_RGB(255,255,0), 3, 8, 0 );
				// 7. 硅凯俊 弊覆捞 沥惑栏肺 历厘登绢 乐绰 包拌肺 捞甫 拳搁 惑俊 免仿窍扁 困秦辑绰 促矫 第笼绢 林绢具摆烈 
				
				  ////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -