Java Android的Canny边缘检测器——基于递归函数的StackOverflow

Java Android的Canny边缘检测器——基于递归函数的StackOverflow,java,android,stack-overflow,edge-detection,Java,Android,Stack Overflow,Edge Detection,我正在为Android开发一个增强现实应用程序。我正在实现Tom Gibara的,并用位图替换了Android不支持的BuffereImage 方法“follow”(张贴在下面)对我造成了StackOverflow错误。这是一个递归函数,但让我困惑的是,在设备崩溃之前,它能正常工作10-15秒 从Google来看,人们似乎已经成功地用Java实现了这个类,但我想知道,不管出于什么原因,它是否在Android上不起作用。Gibara的代码指定它仅用于单线程使用;这可能是问题的一部分吗?如果不是这样

我正在为Android开发一个增强现实应用程序。我正在实现Tom Gibara的,并用位图替换了Android不支持的BuffereImage

方法“follow”(张贴在下面)对我造成了StackOverflow错误。这是一个递归函数,但让我困惑的是,在设备崩溃之前,它能正常工作10-15秒

从Google来看,人们似乎已经成功地用Java实现了这个类,但我想知道,不管出于什么原因,它是否在Android上不起作用。Gibara的代码指定它仅用于单线程使用;这可能是问题的一部分吗?如果不是这样,我的错误对任何人来说都是显而易见的吗

谢谢大家!

private void follow(int x1, int y1, int i1, int threshold) {  
    int x0 = x1 == 0 ? x1 : x1 - 1;  
    int x2 = x1 == width - 1 ? x1 : x1 + 1;  
    int y0 = y1 == 0 ? y1 : y1 - 1;  
    int y2 = y1 == height -1 ? y1 : y1 + 1;

    data[i1] = magnitude[i1];  
    for (int x = x0; x <= x2; x++) {  
        for (int y = y0; y <= y2; y++) {  
            int i2 = x + y * width;  
            if ((y != y1 || x != x1) && data[i2] == 0 
                    && magnitude[i2] >= threshold) {  
                follow(x, y, i2, threshold);  
                return;  
            }  
        }  
    }  
}
private void follow(intx1,inty1,inti1,intthreshold){
int x0=x1==0?x1:x1-1;
intx2=x1==宽度-1?x1:x1+1;
int y0=y1==0?y1:y1-1;
INTY2=y1==高度-1?y1:y1+1;
数据[i1]=震级[i1];

对于(intx=x0;xAndroid的默认线程堆栈比桌面上的线程堆栈小得多,堆栈大小被设置为12kB。你的递归太深了。

谢谢!我将四处寻找适合Android手机的堆栈深度。对于任何对解决方案感兴趣的人,请查看此项目的Android源代码:他将这行代码添加到他的follow函数中,每次调用时都传递一个深度变量调用。如果(深度>mFollowStackDepth)返回;