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