递归函数调用中的EXC_BAD_ACCESS(code = 2)

时间:2017-01-30 05:09:03

标签: c++ opencv recursion

我实现了一个递归函数来做一个在Mat蒙版中生长的区域,并计算该区域的数字和像素,以及与另一个蒙版相比的相交像素数。 我测试了带有小掩模区域的图像,它工作正常。但是,当我为具有大掩码区域的图像调用该函数时,我得到EXC_BAD_ACCESS(代码= 2)。它与调用递归函数的次数有关吗?

这是调用递归函数的地方:

void calculateDice(Mat gtMask, Mat src)
{
    Mat mask;
    src.copyTo(mask);
    int positive = 0;
    int negative = 0;
    imshow("mask", mask);
    for(int i = 0; i < mask.rows; i++)
        for(int j = 0; j < mask.cols; j++)
        {
            Scalar intensity = mask.at<uchar>(i, j);
            if(intensity.val[0] > 200)
            {
                int total = 0;
                int amountIn = 0;
                getMaskIntersection(mask, gtMask, i, j, amountIn, total);
                double percentage = (amountIn*100)/total;
                cout<<"porcentagem dice "<<percentage<<endl;
                if(percentage>=40)
                    positive++;
                else
                    negative++;
            }
        }


    cout<<"verdadeiro positivo "<<positive << " falso positivo "<<negative<<endl;
    //return 0;
}

这是递归函数:

void getMaskIntersection(Mat &mask, Mat gtMask, int i, int j, int &amountIn, int &total)
{
    Scalar intensity;
     intensity = mask.at<uchar>(i,j);
    if(intensity.val[0] < 200)
    {
        return;
    }
    else{
        total++;
        Scalar intensity2 = gtMask.at<uchar>(i,j);

        if(intensity2.val[0]>10)
        {
            amountIn++;
        }

        mask.at<uchar>(i, j) = 0;
        if(i < mask.rows)
            getMaskIntersection(mask, gtMask, i+1, j, amountIn, total);
        if(i > 0)
            getMaskIntersection(mask, gtMask, i-1, j, amountIn, total);
        if(j < mask.cols)
            getMaskIntersection(mask, gtMask, i, j+1, amountIn, total);
        if(j > 0)
            getMaskIntersection(mask, gtMask, i, j-1, amountIn, total);
    }

}

异常总是在递归函数的第一行中抛出,其中声明了标量强度。

0 个答案:

没有答案