这是我下载的一个人脸检测代码里的一个实现二值化的函数//////////////////////////////////////////////////////////////////////////
//二值化图像
//////////////////////////////////////////////////////////////////////////
bool CLikelyHood::CalBinary()
{
if(!m_bLikeliHoodReady) 
return false;
int i,j;
BYTE **temp;
temp = new  BYTE*[m_nHeight];
for(i=0;i <m_nHeight; i++)
{
temp[i] = new BYTE[m_nWidth];
for(j=0; j<m_nWidth; j++) 
temp[i][j] = 0;
} double min = 10000000000000000.0;
int index = -1;
for(int k=5;k>=0;k--)
{
double sum = 0;
for(i=0; i<m_nHeight; i++)
for(j=0; j<m_nWidth; j++)
{
if(m_pLikeliHoodArray[i][j]>k*0.1+0.05)
m_pBinaryArray[i][j] = 1;
else
m_pBinaryArray[i][j] = 0;
sum += (m_pBinaryArray[i][j]-temp[i][j]);
}

if(sum < min)
{
min = sum;
index = 6-k;
}     for(i=0; i<m_nHeight; i++)
    for(j=0; j<m_nWidth; j++)
temp[i][j] = m_pBinaryArray[i][j];
} double optimalThreshold = (7-index)*0.1;
for(i=0; i<m_nHeight; i++)
for(j=0; j<m_nWidth; j++)
{
if(m_pLikeliHoodArray[i][j]>optimalThreshold)
m_pBinaryArray[i][j] = 1;
else
m_pBinaryArray[i][j] = 0;
} if(temp!=NULL)
{
for(int i=0;i<=m_nHeight-1;i++)
if(temp[i]!=NULL) delete temp[i];
delete temp;
} m_bBinaryReady = true; return true;
}