📄 opencv_dialogdlg.cpp
字号:
// 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 + -