我实现了一个递归函数来做一个在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);
}
}
异常总是在递归函数的第一行中抛出,其中声明了标量强度。