Opencv递归问题

时间:2014-03-20 21:22:27

标签: c++ c opencv recursion computer-vision

我在处理OpenCV项目方面仍然很新,但我遇到了一个问题,我已经在一段时间内处理了一个递归函数。

基本上,这个想法也是使用强弱阈值在图像中找到连接的组件。代码如下:

Mat DoubleThresholding(int thresh_strong, int thresh_weak, Mat image, int thresh_type, int denoise_k_size)
{
Mat strong, weak;
// cc_mask will be a global variable so it can be modified 
// by the Connector function
if (image.channels() >1){
    cvtColor( image, image, COLOR_RGB2GRAY ); // cvtColor(src, dst, code,dstCn)
}
threshold(image, weak, thresh_weak, 50, thresh_type);
threshold(image, strong, thresh_strong, 50, thresh_type);
 if(denoise_k_size>0){
Denoise(strong, denoise_k_size);
}

cc_mask = strong+weak;

for(int i=0; i<image.cols; i++)
    {
        for(int j=0; j<image.rows; j++)
            {
                if(cc_mask.at<uchar>(j,i)==100)
                {
                    cc_mask.at<uchar>(j,i)=255;
                    //printf("mistake caught at row =%i col =%i )\n" , j,i);
                    if((i-1)>0) {Connector(i-1,j);}
                    if((i+1)<image.cols)    {Connector(i+1,j);}
                    if((j-1)>0) {Connector(i,j-1);}
                    if((j+1)<image.rows)    {Connector(i,j+1);}
                }
            }
    }


for(int i=0; i<image.cols; i++)
    {
        for(int j=0; j<image.rows; j++)
            {
                if(cc_mask.at<uchar>(j,i)!=255)
                {

                    cc_mask.at<uchar>(j,i) = 0;             
                }
            }
    }



return cc_mask.clone();

};





void Connector( int i, int j)
{
if (cc_mask.empty() == true)
{

    return;
}
if (i<0 || i>cc_mask.cols || j<0 || j>cc_mask.rows)
{

    return;
}
else
{
    if(cc_mask.at<uchar>(j,i) == 50)
    {
    cc_mask.at<uchar>(j,i) = 255;
    Connector(i-1,j);
    Connector(i+1,j);
    Connector(i,j-1);
    Connector(i,j+1);

    }
    return ;
}


};

我一直遇到一个seg故障问题,我知道它与尝试访问超出界限的东西有关,但我不能为我的生活找出我似乎的情况失踪。

提前感谢您的帮助。

0 个答案:

没有答案