好的,我已经花了几个小时在这上面了,所以如果解决这个问题可能非常简单,请原谅。我有一个循环迭代图像,它从某个像素开始,向左移动几个像素并检查它们是否满足条件。如果我找到符合条件的点,我会返回它。如果没有找到或超出图像范围,我将返回{-1,-1}
private static int[] checkLineLeft(int[] point, Mat intensity) {
for (int i = 1; i < intensity.width()*0.2f; i += 1) {
try {
if (intensity.get(point[1], point[0] - i)[0] > 100
&& intensity.get(point[1], point[0] - i)[2] < 50) {
return new int[]{point[0] - i, point[1]};
} else {
continue;
}
} catch (Exception e) {
return new int[]{-1, -1};
}
}
return new int[]{-1, -1};
}
我的问题是我得到了非常奇怪的结果。我总是得到一个点
{-23646,286}
(第二个值是正确的)。我无法解释为什么会出现这种情况。我调试了一下,发现在某个点上条件没有满足(我想检测的那个点),但函数却返回到for循环的开始处重新开始,而不是返回我的{-1,-1}
。以下是我调用该函数的方式:
int[] newMarkerBottom = checkLineLeft(markerBottom, intensity);
while (newMarkerBottom[0] != -1) {
markerBottom = newMarkerBottom.clone();
newMarkerBottom = checkLineLeft(markerBottom, intensity);
}
编辑
我再次检查了,当if
条件的内部部分为false时,并没有捕获到任何异常。调试器只是跳回到for(...)
这一行并继续执行。
编辑2
我正在运行一个Android应用程序。然而,我认为这不能成为问题的一部分。
编辑3
这可能有所帮助:当我将断点设置为return return new int[]{point[0] - i, point[1]};
时,它会停在那里,然后在下一步中跳转到最后一个return new int[]{-1,-1};
,并且永远不会再次到达断点。
else
/continue
。 - Andy Turner{-23646,286}
",看起来你的point[0]
相当小,而i
很高,所以在return new int[]{point[0] - i, point[1]}
中,point[0] - i
将为负数。你能创建一个可运行的示例,这样我们就可以在本地运行你的代码吗?" - Tom