C++ Builder下的区域生长法如何实现

C++ Builder下的区域生长法怎么实现?
我想对PICTUREBOX中的图像进行区域识别,但一直找不到C++ BUILDER的相关代码,资料太少了
如图所示,我想识别出图中4个头像,请大虾多多指教。
C++ Builder下的区域生长法如何实现


以下是VC的代码,我改了几天也没有成功
/*************************************************************************
*
* \\函数名称:
*   RegionGrow()
*
* \\输入参数:
*   CDib * pDib     - 指向CDib类的指针,含有原始图象信息
*   unsigned char * pUnRegion  - 指向区域生长结果的指针
*
* \\返回值:
*   无
*
* \\说明:
*   pUnRegion指针指向的数据区存储了区域生长的结果,其中1(逻辑)表示
*  对应象素为生长区域,0表示为非生长区域
*   区域生长一般包含三个比较重要的问题:
*  1. 种子点的选取
*  2. 生长准则
*  3. 终止条件
*  可以认为,这三个问题需要具体分析,而且每个问题解决的好坏直接关系到
*  区域生长的结果。
*  本函数的种子点选取为图像的中心,生长准则是相邻象素的象素值小于
*  nThreshold, 终止条件是一直进行到再没有满足生长准则需要的象素时为止
*
*************************************************************************
*/
void RegionGrow(CDib * pDib, unsigned char * pUnRegion, int nThreshold)
{
 static int nDx[]={-1,0,1,0};
 static int nDy[]={0,1,0,-1};

 // 遍历图象的纵坐标
// int y;

 // 遍历图象的横坐标
// int x;

 // 图象的长宽大小
 CSize sizeImage  = pDib->GetDimensions();
 int nWidth   = sizeImage.cx  ;
 int nHeight   = sizeImage.cy  ;

 // 图像在计算机在存储中的实际大小
 CSize sizeImageSave = pDib->GetDibSaveDim();

 // 图像在内存中每一行象素占用的实际空间
 int nSaveWidth = sizeImageSave.cx;

 // 初始化
 memset(pUnRegion,0,sizeof(unsigned char)*nWidth*nHeight);

 // 种子点
 int nSeedX, nSeedY;

 // 设置种子点为图像的中心
 nSeedX = nWidth /2 ;
 nSeedY = nHeight/2 ;

 // 定义堆栈,存储坐标
 int * pnGrowQueX ;
 int * pnGrowQueY ;
 
 // 分配空间
 pnGrowQueX = new int [nWidth*nHeight];
 pnGrowQueY = new int [nWidth*nHeight];

 // 图像数据的指针
 unsigned char *  pUnchInput =(unsigned char * )pDib->m_lpImage;
 
 // 定义堆栈的起点和终点
 // 当nStart=nEnd, 表示堆栈中只有一个点
 int nStart ;
 int nEnd   ;

 //初始化
 nStart = 0 ;