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

📄 palmpriintrec.cpp

📁 手掌采集程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			*(pcheck+2+9)=*(pD+(nlie+(nhang+1)*nL)*nrgb+2);//R
			*(pcheck+0+12)=*(pD+(nlie+1+(nhang+1)*nL)*nrgb+0);//B
			*(pcheck+1+12)=*(pD+(nlie+1+(nhang+1)*nL)*nrgb+1);//G
			*(pcheck+2+12)=*(pD+(nlie+1+(nhang+1)*nL)*nrgb+2);//R
			*(pcheck+0+15)=*(pD+(nlie+2+(nhang+1)*nL)*nrgb+0);//B
			*(pcheck+1+15)=*(pD+(nlie+2+(nhang+1)*nL)*nrgb+1);//G
			*(pcheck+2+15)=*(pD+(nlie+2+(nhang+1)*nL)*nrgb+2);//R
			*(pcheck+0+18)=*(pD+(nlie+(nhang+2)*nL)*nrgb+0);//B
			*(pcheck+1+18)=*(pD+(nlie+(nhang+2)*nL)*nrgb+1);//G
			*(pcheck+2+18)=*(pD+(nlie+(nhang+2)*nL)*nrgb+2);//R
			*(pcheck+0+21)=*(pD+(nlie+1+(nhang+2)*nL)*nrgb+0);//B
			*(pcheck+1+21)=*(pD+(nlie+1+(nhang+2)*nL)*nrgb+1);//G
			*(pcheck+2+21)=*(pD+(nlie+1+(nhang+2)*nL)*nrgb+2);//R
			*(pcheck+0+24)=*(pD+(nlie+2+(nhang+2)*nL)*nrgb+0);//B
			*(pcheck+1+24)=*(pD+(nlie+2+(nhang+2)*nL)*nrgb+1);//G
			*(pcheck+2+24)=*(pD+(nlie+2+(nhang+2)*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+2+nhang*nL)*nrgb+0);//B
			*(pbk+1+6)=*(pback+(nlie+2+nhang*nL)*nrgb+1);//G
			*(pbk+2+6)=*(pback+(nlie+2+nhang*nL)*nrgb+2);//R
			*(pbk+0+9)=*(pback+(nlie+(nhang+1)*nL)*nrgb+0);//B
			*(pbk+1+9)=*(pback+(nlie+(nhang+1)*nL)*nrgb+1);//G
			*(pbk+2+9)=*(pback+(nlie+(nhang+1)*nL)*nrgb+2);//R
			*(pbk+0+12)=*(pback+(nlie+1+(nhang+1)*nL)*nrgb+0);//B
			*(pbk+1+12)=*(pback+(nlie+1+(nhang+1)*nL)*nrgb+1);//G
			*(pbk+2+12)=*(pback+(nlie+1+(nhang+1)*nL)*nrgb+2);//R
			*(pbk+0+15)=*(pback+(nlie+2+(nhang+1)*nL)*nrgb+0);//B
			*(pbk+1+15)=*(pback+(nlie+2+(nhang+1)*nL)*nrgb+1);//G
			*(pbk+2+15)=*(pback+(nlie+2+(nhang+1)*nL)*nrgb+2);//R
			*(pbk+0+18)=*(pback+(nlie+(nhang+2)*nL)*nrgb+0);//B
			*(pbk+1+18)=*(pback+(nlie+(nhang+2)*nL)*nrgb+1);//G
			*(pbk+2+18)=*(pback+(nlie+(nhang+2)*nL)*nrgb+2);//R
			*(pbk+0+21)=*(pback+(nlie+1+(nhang+2)*nL)*nrgb+0);//B
			*(pbk+1+21)=*(pback+(nlie+1+(nhang+2)*nL)*nrgb+1);//G
			*(pbk+2+21)=*(pback+(nlie+1+(nhang+2)*nL)*nrgb+2);//R
			*(pbk+0+24)=*(pback+(nlie+2+(nhang+2)*nL)*nrgb+0);//B
			*(pbk+1+24)=*(pback+(nlie+2+(nhang+2)*nL)*nrgb+1);//G
			*(pbk+2+24)=*(pback+(nlie+2+(nhang+2)*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+2+nhang*nL)*nrgb+0)=0;
				*(prlt+(nlie+2+nhang*nL)*nrgb+1)=0;
				*(prlt+(nlie+2+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;
				*(prlt+(nlie+2+(nhang+1)*nL)*nrgb+0)=0;
				*(prlt+(nlie+2+(nhang+1)*nL)*nrgb+1)=0;
				*(prlt+(nlie+2+(nhang+1)*nL)*nrgb+2)=0;
				*(prlt+(nlie+(nhang+2)*nL)*nrgb+0)=0;
				*(prlt+(nlie+(nhang+2)*nL)*nrgb+1)=0;
				*(prlt+(nlie+(nhang+2)*nL)*nrgb+2)=0;
				*(prlt+(nlie+1+(nhang+2)*nL)*nrgb+0)=0;
				*(prlt+(nlie+1+(nhang+2)*nL)*nrgb+1)=0;
				*(prlt+(nlie+1+(nhang+2)*nL)*nrgb+2)=0;
				*(prlt+(nlie+2+(nhang+2)*nL)*nrgb+0)=0;
				*(prlt+(nlie+2+(nhang+2)*nL)*nrgb+1)=0;
				*(prlt+(nlie+2+(nhang+2)*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+2+nhang*nL)*nrgb+0)=*(pD+(nlie+2+nhang*nL)*nrgb+0);
				*(prlt+(nlie+2+nhang*nL)*nrgb+1)=*(pD+(nlie+2+nhang*nL)*nrgb+1);
				*(prlt+(nlie+2+nhang*nL)*nrgb+2)=*(pD+(nlie+2+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);
				*(prlt+(nlie+2+(nhang+1)*nL)*nrgb+0)=*(pD+(nlie+2+(nhang+1)*nL)*nrgb+0);
				*(prlt+(nlie+2+(nhang+1)*nL)*nrgb+1)=*(pD+(nlie+2+(nhang+1)*nL)*nrgb+1);
				*(prlt+(nlie+2+(nhang+1)*nL)*nrgb+2)=*(pD+(nlie+2+(nhang+1)*nL)*nrgb+2);
				*(prlt+(nlie+(nhang+2)*nL)*nrgb+0)=*(pD+(nlie+(nhang+2)*nL)*nrgb+0);
				*(prlt+(nlie+(nhang+2)*nL)*nrgb+1)=*(pD+(nlie+(nhang+2)*nL)*nrgb+1);
				*(prlt+(nlie+(nhang+2)*nL)*nrgb+2)=*(pD+(nlie+(nhang+2)*nL)*nrgb+2);
				*(prlt+(nlie+1+(nhang+2)*nL)*nrgb+0)=*(pD+(nlie+1+(nhang+2)*nL)*nrgb+0);
				*(prlt+(nlie+1+(nhang+2)*nL)*nrgb+1)=*(pD+(nlie+1+(nhang+2)*nL)*nrgb+1);
				*(prlt+(nlie+1+(nhang+2)*nL)*nrgb+2)=*(pD+(nlie+1+(nhang+2)*nL)*nrgb+2);
				*(prlt+(nlie+2+(nhang+2)*nL)*nrgb+0)=*(pD+(nlie+2+(nhang+2)*nL)*nrgb+0);
				*(prlt+(nlie+2+(nhang+2)*nL)*nrgb+1)=*(pD+(nlie+2+(nhang+2)*nL)*nrgb+1);
				*(prlt+(nlie+2+(nhang+2)*nL)*nrgb+2)=*(pD+(nlie+2+(nhang+2)*nL)*nrgb+2);
			}
		}
	}

	delete []pcheck;
	delete []pbk;
}
	

void CPalmPriintRec::BGR2GRAY(BYTE *pS, BYTE *pD)
{
	double bB,bG,bR;
	for (int nIndl=0;nIndl<nL;nIndl++)
	{
		for (int nIndh=0;nIndh<nH;nIndh++)
		{
			bB=(double)*(pS+nIndh+nIndl*nH*nrgb);
			bG=(double)*(pS+nIndh+nIndl*nH*nrgb+1);
			bR=(double)*(pS+nIndh+nIndl*nH*nrgb+2);
			*(pD+nIndh+nIndl*nH)=(BYTE)(0.212671*bR + 0.715160*bG + 0.072169*bB);
		}
	}
}

/******************************************************************************
 * RGB转换到YUV
******************************************************************************/
void CPalmPriintRec::RGB2YUV(double *Y, double *U, double *V, double B, double G, double R)
{
	//先从0~255转换为0~1;计算完后从结果到0~255
	*Y=0.299*R+0.587*G+0.114*B;//---------取值范围:0~255
	*U=-0.148*R-0.289*G+0.437*B;//--------取值范围:-0.437~0.437-----可能为0
	*V=0.615*R-0.515*G-0.1*B;//-----------取值范围:-0.615~0.615
}

/******************************************************************************
 * RGB转换到YUV
******************************************************************************/
void CPalmPriintRec::RGB2YIQ(double *Y, double *I, double *Q, double B, double G, double R)
{
	*Y=0.299*R+0.587*G+0.114*B;//---------取值范围:0~255
	*I=0.596*R-0.274*G-0.322*B;//---------取值范围:-0.596~0.596
	*Q=0.211*R-0.523*G+0.312*B;//---------取值范围:-0.523~0.523
}

void CPalmPriintRec::displayDB(BYTE *pD, HWND hd,CString str)
{
	BITMAPINFOHEADER bih;
	memset(&bih,0,sizeof(BITMAPINFOHEADER));
	bih.biSize=sizeof(bih);
	bih.biWidth=nL;
	bih.biHeight=nH;
	bih.biPlanes=1;
	bih.biBitCount=24;
	if (!hd || !pD)
		return;
	RECT rc;
	::GetWindowRect( hd, &rc );
	long lStillWidth = rc.right - rc.left;
	long lStillHeight = rc.bottom - rc.top;
	HDC hdcStill = GetDC( hd );
	PAINTSTRUCT ps;
	BeginPaint(hd, &ps);
	SetStretchBltMode(hdcStill, COLORONCOLOR);
	StretchDIBits(  hdcStill, 0, 0, 
                    lStillWidth, lStillHeight, 
                    0, 0, nL, nH, 
                    pD, 
                    (BITMAPINFO*) &bih, 
                    DIB_RGB_COLORS, 
                    SRCCOPY );
	EndPaint(hd, &ps);
	ReleaseDC( hd, hdcStill );
	//////////////////////////////////////////////////////////////////////////
	long           lbuffersize=nH*nL*nrgb;
	HANDLE hr=(CreateFile(   (LPCSTR)str,
							 GENERIC_WRITE,
							 FILE_SHARE_READ,
							 NULL,
							 CREATE_ALWAYS,
							 NULL,
							 NULL));
	if (SUCCEEDED(hr))
	{
		BITMAPFILEHEADER bfh;
		memset(&bfh,0,sizeof(BITMAPFILEHEADER));
		bfh.bfType='MB';
		bfh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+lbuffersize;
		bfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
		DWORD dwWritten = 0;
        WriteFile(hr,//文件句柄
				  &bfh,//数据块
				  sizeof( bfh ),//尺寸(Byte)
				  &dwWritten,//记录写了多少个Byte
				  NULL );//将FileHeader准备好
		dwWritten=0;
		WriteFile(hr,
				  &bih,
				  sizeof(bih),
				  &dwWritten,
				  NULL);
		dwWritten=0;
		WriteFile(hr,
				  pD,
				  lbuffersize,
				  &dwWritten,
				  NULL);
		CloseHandle(hr);
	}
	return;
}

⌨️ 快捷键说明

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