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

📄 palmpriintrec.cpp

📁 手掌采集程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// PalmPriintRec.cpp: implementation of the CPalmPriintRec class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "tryshot.h"
#include "PalmPriintRec.h"
#include "hdg.h"



#include "math.h"



#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPalmPriintRec::CPalmPriintRec()
{
	//首先需要加载配置文件
	nH=480;
	nL=640;
	nrgb=3;
}

CPalmPriintRec::~CPalmPriintRec()
{

}

//-------连续处理识别nNumb张照片-------
int CPalmPriintRec::rec(BYTE *pD, int nNumb,BYTE *pback,HWND *phwnd)
{
	//pD是当前连续采集的多张照片,pback是背景照片
	//////////////////下面对pback进行预处理///////////////////////////////////
	//   pback是按照bmp的格式保存的,m_pBback已经在对话框产生时初始化好了BGR形式





	//////////////////////////////////////////////////////////////////////////
	int            nrlt=0;
	int           *pR=new int[nNumb];
	BYTE          *ptempdata=new BYTE[nH*nL*nrgb];//处理照片的临时空间
	CString        str_cut_fn;
	for (int nIndex=0;nIndex<nNumb;nIndex++)
	{
		pretreat(ptempdata,pD+nIndex*nH*nL*nrgb,pback);//逐一进行前处理
		str_cut_fn.Empty();
		str_cut_fn.Format("Cut_%d.bmp",nIndex);
		displayDB(ptempdata,*(phwnd+nIndex),str_cut_fn);//_____将预处理的中间结果在主对话框中显示出来
		*(pR+nIndex)=rec_one(pD+nIndex*nH*nL*nrgb,pback);
	}
	nrlt=*(pR);
	delete []ptempdata;
	delete []pR;
	return nrlt;
}

//-------仅识别一张照片--------
int CPalmPriintRec::rec_one(BYTE *pD,BYTE *pback)
{
	int nrlt=0;
	//图像前处理
	//特征提取
	//识别
	return nrlt;
}

//_________对掌纹原始图像进行预处理_____________
//      将与背景不同的部分提取出来,传入prlt中
//pback是原图,
//pD是当前的照片,
//要从pD中将手的轮廓提取出来

/*
2006-12-04
老板建议用RGB夹角来处理背景和前景
*/
//////////////////////////////////////////////////////////////////////////

//  [3/14/2007]
// 下面用灰度分割方法提取出掌纹轮廓
// pD中的数据是怎样安排的
// pD中是当前照片,pback中是背景
void CPalmPriintRec::pretreat(BYTE *prlt,BYTE *pD,BYTE *pback)
{
	int nhang,nlie;
	/*         逐个像素
	double dthreshold=1.8;
	double *pcheck=new double[3];
	double *pbk=new double[3];
	Chdg hdg;
	for (nhang=0;nhang<nH;nhang++)
	{
		for (nlie=0;nlie<nL;nlie++)
		{
			*(pcheck+0)=*(pD+(nlie+nhang*nL)*nrgb+0);//B
			*(pcheck+1)=*(pD+(nlie+nhang*nL)*nrgb+1);//G
			*(pcheck+2)=*(pD+(nlie+nhang*nL)*nrgb+2);//R
			*(pbk+0)=*(pback+(nlie+nhang*nL)*nrgb+0);//B
			*(pbk+1)=*(pback+(nlie+nhang*nL)*nrgb+1);//G
			*(pbk+2)=*(pback+(nlie+nhang*nL)*nrgb+2);//R
			//计算夹角
			//double tprlt=hdg.cacuangle(pcheck,pbk,3);
			if (dthreshold>hdg.cacuangle(pcheck,pbk,3))
			{
				*(prlt+(nlie+nhang*nL)*nrgb+0)=0;
				*(prlt+(nlie+nhang*nL)*nrgb+1)=0;
				*(prlt+(nlie+nhang*nL)*nrgb+2)=0;
			}
			else
			{
				*(prlt+(nlie+nhang*nL)*nrgb+0)=*(pD+(nlie+nhang*nL)*nrgb+0);
				*(prlt+(nlie+nhang*nL)*nrgb+1)=*(pD+(nlie+nhang*nL)*nrgb+1);
				*(prlt+(nlie+nhang*nL)*nrgb+2)=*(pD+(nlie+nhang*nL)*nrgb+2);
			}
		}
	}
	*/
	/*           2×2像素
	double dthreshold=1.8;
	double *pcheck=new double[12];//3×4
	double *pbk=new double[12];
	Chdg hdg;
	for (nhang=0;nhang<nH;nhang=nhang+2)
	{
		for (nlie=0;nlie<nL;nlie=nlie+2)
		{
			*(pcheck+0)=*(pD+(nlie+nhang*nL)*nrgb+0);//B
			*(pcheck+1)=*(pD+(nlie+nhang*nL)*nrgb+1);//G
			*(pcheck+2)=*(pD+(nlie+nhang*nL)*nrgb+2);//R
			*(pcheck+0+3)=*(pD+(nlie+1+nhang*nL)*nrgb+0);//B
			*(pcheck+1+3)=*(pD+(nlie+1+nhang*nL)*nrgb+1);//G
			*(pcheck+2+3)=*(pD+(nlie+1+nhang*nL)*nrgb+2);//R
			*(pcheck+0+6)=*(pD+(nlie+(nhang+1)*nL)*nrgb+0);//B
			*(pcheck+1+6)=*(pD+(nlie+(nhang+1)*nL)*nrgb+1);//G
			*(pcheck+2+6)=*(pD+(nlie+(nhang+1)*nL)*nrgb+2);//R
			*(pcheck+0+9)=*(pD+(nlie+1+(nhang+1)*nL)*nrgb+0);//B
			*(pcheck+1+9)=*(pD+(nlie+1+(nhang+1)*nL)*nrgb+1);//G
			*(pcheck+2+9)=*(pD+(nlie+1+(nhang+1)*nL)*nrgb+2);//R
			//////////////////////////////////////////////////////////////////////////
			*(pbk+0)=*(pback+(nlie+nhang*nL)*nrgb+0);//B
			*(pbk+1)=*(pback+(nlie+nhang*nL)*nrgb+1);//G
			*(pbk+2)=*(pback+(nlie+nhang*nL)*nrgb+2);//R
			*(pbk+0+3)=*(pback+(nlie+1+nhang*nL)*nrgb+0);//B
			*(pbk+1+3)=*(pback+(nlie+1+nhang*nL)*nrgb+1);//G
			*(pbk+2+3)=*(pback+(nlie+1+nhang*nL)*nrgb+2);//R
			*(pbk+0+6)=*(pback+(nlie+(nhang+1)*nL)*nrgb+0);//B
			*(pbk+1+6)=*(pback+(nlie+(nhang+1)*nL)*nrgb+1);//G
			*(pbk+2+6)=*(pback+(nlie+(nhang+1)*nL)*nrgb+2);//R
			*(pbk+0+9)=*(pback+(nlie+1+(nhang+1)*nL)*nrgb+0);//B
			*(pbk+1+9)=*(pback+(nlie+1+(nhang+1)*nL)*nrgb+1);//G
			*(pbk+2+9)=*(pback+(nlie+1+(nhang+1)*nL)*nrgb+2);//R
			//计算夹角
			double tprlt=hdg.cacuangle(pcheck,pbk,12);
			if (dthreshold>hdg.cacuangle(pcheck,pbk,12))
			{
				*(prlt+(nlie+nhang*nL)*nrgb+0)=0;
				*(prlt+(nlie+nhang*nL)*nrgb+1)=0;
				*(prlt+(nlie+nhang*nL)*nrgb+2)=0;
				*(prlt+(nlie+1+nhang*nL)*nrgb+0)=0;
				*(prlt+(nlie+1+nhang*nL)*nrgb+1)=0;
				*(prlt+(nlie+1+nhang*nL)*nrgb+2)=0;
				*(prlt+(nlie+(nhang+1)*nL)*nrgb+0)=0;
				*(prlt+(nlie+(nhang+1)*nL)*nrgb+1)=0;
				*(prlt+(nlie+(nhang+1)*nL)*nrgb+2)=0;
				*(prlt+(nlie+1+(nhang+1)*nL)*nrgb+0)=0;
				*(prlt+(nlie+1+(nhang+1)*nL)*nrgb+1)=0;
				*(prlt+(nlie+1+(nhang+1)*nL)*nrgb+2)=0;
			}
			else
			{
				*(prlt+(nlie+nhang*nL)*nrgb+0)=*(pD+(nlie+nhang*nL)*nrgb+0);
				*(prlt+(nlie+nhang*nL)*nrgb+1)=*(pD+(nlie+nhang*nL)*nrgb+1);
				*(prlt+(nlie+nhang*nL)*nrgb+2)=*(pD+(nlie+nhang*nL)*nrgb+2);
				*(prlt+(nlie+1+nhang*nL)*nrgb+0)=*(pD+(nlie+1+nhang*nL)*nrgb+0);
				*(prlt+(nlie+1+nhang*nL)*nrgb+1)=*(pD+(nlie+1+nhang*nL)*nrgb+1);
				*(prlt+(nlie+1+nhang*nL)*nrgb+2)=*(pD+(nlie+1+nhang*nL)*nrgb+2);
				*(prlt+(nlie+(nhang+1)*nL)*nrgb+0)=*(pD+(nlie+(nhang+1)*nL)*nrgb+0);
				*(prlt+(nlie+(nhang+1)*nL)*nrgb+1)=*(pD+(nlie+(nhang+1)*nL)*nrgb+1);
				*(prlt+(nlie+(nhang+1)*nL)*nrgb+2)=*(pD+(nlie+(nhang+1)*nL)*nrgb+2);
				*(prlt+(nlie+1+(nhang+1)*nL)*nrgb+0)=*(pD+(nlie+1+(nhang+1)*nL)*nrgb+0);
				*(prlt+(nlie+1+(nhang+1)*nL)*nrgb+1)=*(pD+(nlie+1+(nhang+1)*nL)*nrgb+1);
				*(prlt+(nlie+1+(nhang+1)*nL)*nrgb+2)=*(pD+(nlie+1+(nhang+1)*nL)*nrgb+2);
			}
		}
	}
	*/
	//                3×3像素
	double dthreshold=2;//1.8;
	double *pcheck=new double[27];//3×9
	double *pbk=new double[27];
	Chdg hdg;
	for (nhang=0;nhang<nH;nhang=nhang+3)
	{
		for (nlie=0;nlie<(nL-1);nlie=nlie+3)
		{
			*(pcheck+0)=*(pD+(nlie+nhang*nL)*nrgb+0);//B
			*(pcheck+1)=*(pD+(nlie+nhang*nL)*nrgb+1);//G
			*(pcheck+2)=*(pD+(nlie+nhang*nL)*nrgb+2);//R
			*(pcheck+0+3)=*(pD+(nlie+1+nhang*nL)*nrgb+0);//B
			*(pcheck+1+3)=*(pD+(nlie+1+nhang*nL)*nrgb+1);//G
			*(pcheck+2+3)=*(pD+(nlie+1+nhang*nL)*nrgb+2);//R
			*(pcheck+0+6)=*(pD+(nlie+2+nhang*nL)*nrgb+0);
			*(pcheck+1+6)=*(pD+(nlie+2+nhang*nL)*nrgb+1);
			*(pcheck+2+6)=*(pD+(nlie+2+nhang*nL)*nrgb+2);
			*(pcheck+0+9)=*(pD+(nlie+(nhang+1)*nL)*nrgb+0);//B
			*(pcheck+1+9)=*(pD+(nlie+(nhang+1)*nL)*nrgb+1);//G

⌨️ 快捷键说明

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