OpenCV:区域生长法实现( 二 )


       Mat markImg=Mat::zeros(srcImg.size(),CV_8UC1);//标识表记标帜点
       unsigned char *pData = https://vvvtt.com/article/(unsigned char *)(markImg.data+pt.y*markImg.step);
       pData[pt.x]=255;//标识表记标帜初始发展点
      
       startPtValue = https://vvvtt.com/article/((unsigned char*)(srcImg.data+pt.y*srcImg.step))[pt.x];
      
       while (!growPtVec.empty())
       {
              Point currPt = growPtVec.back();//返回当前vector最末一个元素
              growPtVec.pop_back();//弹出最后压入的数据
              for (int i=0;i<8;i++)
              {
                     ptGrowing.x = currPt.x+mDir[i][0];
                     ptGrowing.y = currPt.y+mDir[i][1];
                     //判定是否是边缘点
                     if (ptGrowing.x<0||ptGrowing.y<0||(ptGrowing.x>srcImg.cols-1)||(ptGrowing.y>srcImg.rows))
                            continue;//继续执行下一次轮回
                     //判定是否已被标识表记标帜
                     nGrowLabel = ((unsigned char*)(markImg.data+ptGrowing.y*markImg.step))[ptGrowing.x];
                     if (nGrowLabel==0)//没有被标识表记标帜
                     {
【OpenCV:区域生长法实现】                            currPtValue = https://vvvtt.com/article/((unsigned char*)(srcImg.data+ptGrowing.y*srcImg.step))[ptGrowing.x];
                            if (abs(currPtValue-startPtValue)<=thre)
                            {
                                   ((unsigned char*)(markImg.data+ptGrowing.y*markImg.step))[ptGrowing.x]=255;
                                   growPtVec.push_back(ptGrowing);
                            }

猜你喜欢