📄 facedetectview.cpp
字号:
((v_top-v_bottom)/2+L_beye+Cofg_lefteyey-Cofg_mouthy-B_MouthMiddleLine)+
(H_rMouth+Cofg_mouthx-H_lreye-Cofg_righteyex)*(H_rMouth+Cofg_mouthx-H_lreye-Cofg_righteyex);
Toweye_mouth= (T_line-R_line-L_line)/(-2.0*sqrt(R_line)*sqrt(L_line));
/////////////////////////////////////////////////////////两个眼睛中心距与脸宽的比例/////
Toweye_face=double(X)/(v_left-v_right);
///////////////////////////////////////与两眼重心和斜线所形成的角///////////////////////
}
///////////////////////////获取整个脸部特征/////////////////////////////////////
void CFaceDetectView::GetPartParameter()
{
Zx=0.0;
Zy=0.0;
M10=GetM(1,0);
M00=GetM(0,0);
M01=GetM(0,1);
Zx=M10/M00;
Zy=M01/M00;
M1=Getm(2,0)+Getm(0,2);
M2=(Getm(2,0)-Getm(0,2))*(Getm(2,0)-Getm(0,2))+4*(Getm(1,1)*Getm(1,1));
M3=(Getm(3,0)-Getm(1,2))*(Getm(3,0)-Getm(1,2))+(3*Getm(2,1)+Getm(0,3))*(3*Getm(2,1)+Getm(0,3));
M4=(Getm(3,0)+Getm(1,2))*(Getm(3,0)+Getm(1,2))+(Getm(2,1)+Getm(0,3))*(Getm(2,1)+Getm(0,3));
M5=(Getm(3,0)-3*Getm(1,2))*(Getm(3,0)+Getm(1,2))*((Getm(3,0)+Getm(1,2))*(Getm(3,0)+Getm(1,2))-3*(Getm(2,1)+Getm(0,3))*(Getm(2,1)+Getm(0,3)))+
(3*Getm(2,1)-Getm(0,3))*(Getm(2,1)+Getm(0,3))*(3*(Getm(3,0)+Getm(1,2))*(Getm(3,0)+Getm(1,2))-(Getm(2,1)+Getm(0,3))*(Getm(2,1)+Getm(0,3)));
M6=(Getm(2,0)-Getm(0,2))*((Getm(3,0)+Getm(1,2))*(Getm(3,0)+Getm(1,2))-(Getm(2,1)+Getm(0,3))*(Getm(2,1)+Getm(0,3)))+4*Getm(1,1)*(Getm(3,0)+Getm(1,2))*(Getm(2,1)+Getm(0,3));
M7=(3*Getm(1,2)-Getm(3,0))*(Getm(3,0)+Getm(1,2))*((Getm(3,0)+Getm(1,2))*(Getm(3,0)+Getm(1,2))-3*(Getm(2,1)+Getm(0,3))*(Getm(2,1)+Getm(0,3)))+
(3*Getm(2,1)-Getm(0,3))*(Getm(2,1)+Getm(0,3))*(2*(Getm(0,3)+Getm(1,2))*(Getm(0,3)+Getm(1,2)));
Eleye=(Getmleye(2,0)+Getmleye(0,2)+sqrt((Getmleye(2,0)+Getmleye(0,2))*(Getmleye(2,0)+Getmleye(0,2))-4*Getmleye(0,2)*Getmleye(2,0)+4*Getmleye(1,1)*Getmleye(1,1)))/
(Getmleye(2,0)+Getmleye(0,2)-sqrt((Getmleye(2,0)+Getmleye(0,2))*(Getmleye(2,0)+Getmleye(0,2))-4*Getmleye(0,2)*Getmleye(2,0)+4*Getmleye(1,1)*Getmleye(1,1)));
Ereye=(Getmreye(2,0)+Getmreye(0,2)+sqrt((Getmreye(2,0)+Getmreye(0,2))*(Getmreye(2,0)+Getmreye(0,2))-4*Getmreye(0,2)*Getmreye(2,0)+4*Getmreye(1,1)*Getmreye(1,1)))/
(Getmreye(2,0)+Getmreye(0,2)-sqrt((Getmreye(2,0)+Getmreye(0,2))*(Getmreye(2,0)+Getmreye(0,2))-4*Getmreye(0,2)*Getmreye(2,0)+4*Getmreye(1,1)*Getmreye(1,1)));
}
double CFaceDetectView::GetM(int n,int m)
{
double GetCM=0;
for(int i=0;i<v_top-v_bottom;i++)
for(int j=0;j<v_right-v_left;j++)
{
double Getx=0.0;
Getx=pow(i,n);
double Gety=0.0;
Gety=pow(j,m);
int fij;
if(WhiteBlack[i][j]==0)
fij=1;
else
fij=0;
GetCM=GetCM+fij*Getx*Gety;
}
return GetCM;
}
double CFaceDetectView::Getm(int n,int m)
{
double GetCm=0;
int flat=0;
for(int i=0;i<v_top-v_bottom;i++)
for(int j=0;j<v_right-v_left;j++)
{
double Getx=0.0;
Getx=pow(i-Zx,-n);
double Gety=0.0;
Gety=pow(j-Zy,-m);
int fij;
if(WhiteBlack[i][j]==0)
fij=1;
else
fij=0;
GetCm=GetCm+fij*Getx*Gety;
}
double m00=1.0;
if((n+m)>1&&flat==0)
{
m00=pow(Getm(0,0),double (m+n)/2);
flat=1;
}
GetCm=GetCm/m00;
return GetCm;
}
double CFaceDetectView::Getmleye(int n,int m)
{
double GetCmleye=0;
for(int i=(v_top-v_bottom)/2+L_beye,y=1;i<=(v_top-v_bottom)/2+L_teye;i++,y++)
for(int j=H_lreye,x=1;j<=H_lleye;j++,x++)
{
double Getx=0.0;
Getx=pow(i-Zx,-n);
double Gety=0.0;
Gety=pow(j-Zy,-m);
int fij;
if(WhiteBlack[i][j]==0)
fij=1;
else
fij=0;
GetCmleye=GetCmleye+fij*Getx*Gety;
}
return GetCmleye;
}
double CFaceDetectView::Getmreye(int n,int m)
{
double GetCmreye=0;
for(int i=(v_top-v_bottom)/2+R_beye,y=1;i<(v_top-v_bottom)/2+R_teye;i++,y++)
for(int j=H_rreye,x=1;j<=H_rleye;j++,x++)
{
double Getx=0.0;
Getx=pow(i-Zx,-n);
double Gety=0.0;
Gety=pow(j-Zy,-m);
int fij;
if(WhiteBlack[i][j]==0)
fij=1;
else
fij=0;
GetCmreye=GetCmreye+fij*Getx*Gety;
}
return GetCmreye;
}
void CFaceDetectView::OnPROSSINGdetect()
{
// TODO: Add your command handler code here
UpdateData(TRUE);
CString SQLstr;
double temp=0.0;
int Count=100;
///////////////////////////////////////////////////////////////////
SQLstr = "SELECT username,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,Picture,Sex,Age,Birthday,Teleph,Address FROM CParameter";
theApp.ADOExecute(theApp.m_pADOSet,SQLstr);
Count=theApp.m_pADOSet->GetRecordCount();
CFaceDetectDoc *doc=new CFaceDetectDoc();
CString name="liminyue2";
int nResponse=0;
if(Count==0)
{
message *dlgname=new message();
int GN=dlgname->DoModal();
/////弹出对话框插入///////////
if(GN==IDOK)
{
name=dlgname->m_Name;
////插入
ADDFace(name);
}
}
/* CFaceDetectApp *App1;//=new CFaceDetectApp();
if(Count==0&&Study==0)
{
nResponse =App1->study();
if (nResponse == 1)
{
MessageName dlgname;
GetName=App1->Message();
if(GetName==1)
name=dlgname.m_username;
else
return ;
CString s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11;
s1.Format("%d",x1);
s2.Format("%d",x2);
s3.Format("%d",x3);
s4.Format("%d",x4);
s5.Format("%d",x5);
s6.Format("%d",x6);
s7.Format("%d",x7);
s8.Format("%d",x8);
s9.Format("%d",x9);
s10.Format("%d",x10);
s11.Format("%d",x11);
CString path=doc->path;
name="li";
SQLstr ="insert into CParameter (username,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,Picture) values('"+name+","+s1+","+s2+","+s3+","+s4+","+s5+","+s6+","+s7+","+s8+","+s9+","+s10+","+s11+","+path+"')";
theApp.ADOExecute(theApp.m_pADOSet,SQLstr);
UpdateData(TRUE);
::AfxMessageBox("请确认图片中是否有人脸!");
}
else if (nResponse == 0)
{
return ;
}
}
*/
_variant_t sName;
_variant_t sE;
_variant_t aG;
_variant_t bI;
_variant_t tE;
_variant_t aD;
_variant_t pI;
_variant_t Y1;
_variant_t Y2;
_variant_t Y3;
_variant_t Y4;
_variant_t Y5;
_variant_t Y6;
_variant_t Y7;
_variant_t Y8;
_variant_t Y9;
_variant_t Y10;
_variant_t Y11;
if(Count>0)
{
theApp.m_pADOSet->MoveFirst();
_variant_t UnameY=theApp.m_pADOSet->GetCollect("username");
sName=UnameY;
Y1=theApp.m_pADOSet->GetCollect("X1");
Y2=theApp.m_pADOSet->GetCollect("X2");
Y3=theApp.m_pADOSet->GetCollect("X3");
Y4=theApp.m_pADOSet->GetCollect("X4");
Y5=theApp.m_pADOSet->GetCollect("X5");
Y6=theApp.m_pADOSet->GetCollect("X6");
Y7=theApp.m_pADOSet->GetCollect("X7");
Y8=theApp.m_pADOSet->GetCollect("X8");
Y9=theApp.m_pADOSet->GetCollect("X9");
Y10=theApp.m_pADOSet->GetCollect("X10");
Y11=theApp.m_pADOSet->GetCollect("X11");
pI=theApp.m_pADOSet->GetCollect("Picture");
sE=theApp.m_pADOSet->GetCollect("Sex");
aG=theApp.m_pADOSet->GetCollect("Age");
bI=theApp.m_pADOSet->GetCollect("Birthday");
tE=theApp.m_pADOSet->GetCollect("Teleph");
aD=theApp.m_pADOSet->GetCollect("Address");
theApp.m_pADOSet->MoveNext();
for(int i=0;i<Count-1;i=i+1)
{
_variant_t UnameZ=theApp.m_pADOSet->GetCollect("username");
_variant_t Z1=theApp.m_pADOSet->GetCollect("X1");
_variant_t Z2=theApp.m_pADOSet->GetCollect("X2");
_variant_t Z3=theApp.m_pADOSet->GetCollect("X3");
_variant_t Z4=theApp.m_pADOSet->GetCollect("X4");
_variant_t Z5=theApp.m_pADOSet->GetCollect("X5");
_variant_t Z6=theApp.m_pADOSet->GetCollect("X6");
_variant_t Z7=theApp.m_pADOSet->GetCollect("X7");
_variant_t Z8=theApp.m_pADOSet->GetCollect("X8");
_variant_t Z9=theApp.m_pADOSet->GetCollect("X9");
_variant_t Z10=theApp.m_pADOSet->GetCollect("X10");
_variant_t Z11=theApp.m_pADOSet->GetCollect("X11");
int sum1=0;
int sum2=0;
if(fabs(double(Y1)-x1)>fabs(double(Z1)-x1))
sum2++;
else
sum1++;
if(fabs(double(Y2)-x2)>fabs(double(Z2)-x2))
sum2++;
else
sum1++;
if(fabs(double(Y3)-x3)>fabs(double(Z3)-x3))
sum2++;
else
sum1++;
if(fabs(double(Y4)-x4)>fabs(double(Z4)-x4))
sum2++;
else
sum1++;
if(fabs(double(Y5)-x5)>fabs(double(Z5)-x5))
sum2++;
else
sum1++;
if(fabs(double(Y6)-x6)>fabs(double(Z6)-x6))
sum2++;
else
sum1++;
if(fabs(double(Y7)-x7)>fabs(double(Z7)-x7))
sum2++;
else
sum1++;
if(fabs(double(Y8)-x8)>fabs(double(Z8)-x8))
sum2++;
else
sum1++;
if(fabs(double(Y9)-x9)>fabs(double(Z9)-x9))
sum2++;
else
sum1++;
if(fabs(double(Y10)-x10)>fabs(double(Z10)-x10))
sum2++;
else
sum1++;
if(fabs(double(Y11)-x11)>fabs(double(Z11)-x11))
sum2++;
else
sum1++;
if(sum1<sum2)
{ sE=theApp.m_pADOSet->GetCollect("Sex");
sE=theApp.m_pADOSet->GetCollect("Sex");
aG=theApp.m_pADOSet->GetCollect("Age");
bI=theApp.m_pADOSet->GetCollect("Birthday");
tE=theApp.m_pADOSet->GetCollect("Teleph");
aD=theApp.m_pADOSet->GetCollect("Address");
pI=theApp.m_pADOSet->GetCollect("Picture");
UnameY=UnameZ;
sName=UnameY;
Y1=Z1;
Y2=Z2;
Y2=Z2;
Y3=Z3;
Y4=Z4;
Y5=Z5;
Y6=Z6;
Y7=Z7;
Y8=Z8;
Y9=Z9;
Y10=Z10;
Y11=Z11;
}
theApp.m_pADOSet->MoveNext();
}
}
double Dsum;
CString a1=(char* )(_bstr_t)Y1;
double b1=atof(a1);
CString a2=(char* )(_bstr_t)x1;
double b2=atof(a2);
double Dsum1=fabs(b1-b2);
a1=(char* )(_bstr_t)Y2;
b1=atof(a1);
a2=(char* )(_bstr_t)x2;
b2=atof(a2);
double Dsum2=fabs(b1-b2);
a1=(char* )(_bstr_t)Y3;
b1=atof(a1);
a2=(char* )(_bstr_t)x3;
b2=atof(a2);
double Dsum3=fabs(b1-b2);
a1=(char* )(_bstr_t)Y4;
b1=atof(a1);
a2=(char* )(_bstr_t)x4;
b2=atof(a2);
double Dsum4=fabs(b1-b2);
a1=(char* )(_bstr_t)Y5;
b1=atof(a1);
a2=(char* )(_bstr_t)x5;
b2=atof(a1);
double Dsum5=fabs(b1-b2);
a1=(char* )(_bstr_t)Y6;
b1=atof(a1);
a2=(char* )(_bstr_t)x6;
b2=atof(a2);
double Dsum6=fabs(b1-b2);
a1=(char* )(_bstr_t)Y7;
b1=atof(a1);
a2=(char* )(_bstr_t)x7;
b2=atof(a2);
double Dsum7=fabs(b1-b2);
a1=(char* )(_bstr_t)Y8;
b1=atof(a1);
a2=(char* )(_bstr_t)x8;
b2=atof(a2);
double Dsum8=fabs(b1-b2);
a1=(char* )(_bstr_t)Y9;
b1=atof(a1);
a2=(char* )(_bstr_t)x9;
b2=atof(a2);
double Dsum9=fabs(b1-b2);
a1=(char* )(_bstr_t)Y10;
b1=atof(a1);
a2=(char* )(_bstr_t)x10;
b2=atof(a2);
double Dsum10=fabs(b1-b2);
a1=(char* )(_bstr_t)Y11;
b1=atof(a1);
a2=(char* )(_bstr_t)x11;
b2=atof(a2);
double Dsum11=fabs(b1-b2);
Dsum=Dsum1+Dsum2+Dsum3+Dsum4+Dsum5+Dsum6+Dsum7+Dsum8+Dsum9+Dsum10+Dsum11;
shujuyanchi *yanchi=new shujuyanchi();
// yanchi->DoModal();
for(int i=0;i<15000;i++)
{
for(int j=0;j<50000;j++)
{
;
}
}
yanchi->DestroyWindow();
CFaceDetectDoc * InsertPicture=new CFaceDetectDoc();
CString strTemp=(char* )(_bstr_t)pI;
InsertPicture->OnOpenDocument1(strTemp);
ShowPMessage *SPM=new ShowPMessage();
SPM->m_Name=(char* )(_bstr_t)sName;//MessageBox("OK!");
SPM->m_Sex=(char* )(_bstr_t)sE;
SPM->m_Age=(char* )(_bstr_t)aG;
SPM->m_Birthday=(char* )(_bstr_t)bI;
SPM->m_Teleph=(char* )(_bstr_t)tE;
SPM->m_Address=(char* )(_bstr_t)aD;
SPM->DoModal();
//MessageBox("OK!");
//CString m_name="100";
//SQLstr = "DELETE FROM CParameter WHERE (username)=('"+m_name+"')";
//theApp.ADOExecute(theApp.m_pADOSet,SQLstr);
//name ="100";
//SQLstr = "UPDATE CParameter SET username=('"+name+"') WHERE (username)=('"+m_name+"')";
// theApp.ADOExecute(theApp.m_pADOSet,SQLstr);
/* ////////////////////////////////////////////////////////////////////
for(i=0;i<Count;i++)
{
SQLstr = "SELECT Name,EtoEAngle,EtoEThreshold, EtoNtoEAngle,EtoNtoEThreshold FROM CParameterusers ";
theApp.ADOExecute(theApp.m_pADOSet,SQLstr);
_variant_t Cunt=theApp.m_pADOSet->GetCollect("old");
theApp.m_pADOSet->MpveNext();
}
//////////////////////////////////////////////////
if(flag)
{
// SQLstr = "insert into users (username) values('"+m_name+"')";
}
*/
}
///////////////////////////////////平均值的标准偏差///////////////////////////////
double CFaceDetectView::AverageDeviation(double NewData,double OldData)
{ double Sx;
Sx=sqrt(((NewData-OldData)*(NewData-OldData))/2);
return Sx;
}
//////////////////////////////////// 画十字////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
void CFaceDetectView::DrawCrossX(int X,int Y)
{
LPBYTE lpData;
lpData = gDib.FindDIBBits(hDIB);
WORD gwBytesPerLine = gDib.BytePerLine(hDIB);
int lOffset;
for(int j=X-4;j<X+4;j++)
{
lOffset = gDib.PixelOffset(Y, j, gwBytesPerLine);
*(lpData + lOffset) = 0;
*(lpData + lOffset+1) = 0;
*(lpData + lOffset+2) =255 ;
}
for(int i=Y-4;i<Y+4;i++)
{
lOffset = gDib.PixelOffset(i, X, gwBytesPerLine);
*(lpData + lOffset) = 0;
*(lpData + lOffset+1) = 255;
*(lpData + lOffset+2) =0 ;
}
Invalidate();
}
BOOL CFaceDetectView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -