我试图从二进制图像中获取边界但是我不断收到错误' java.lang.ArrayIndexOutOfBoundsException:'任何人都可以确定我如何解决这个问题?
int perimeter = 0;
Raster raster = source.getRaster();
for (int i = 1; i<source.getHeight();i++){
for(int j =1; j<source.getWidth();j++){
if(raster.getSample(j, i, 0) == 0){
if(raster.getSample(j+1, i, 0) == 1 || raster.getSample(j-1, i, 0) == 1 || raster.getSample(j, i+1, 0) == 1 || raster.getSample(j, i-1, 0) == 1){
perimeter++;
}
}
}
}
答案 0 :(得分:0)
试试这个:
int perimeter = 0;
Raster raster = source.getRaster();
for (int i=1; i<source.getHeight()-1; i++) {
for (int j=1; j<source.getWidth()-1; j++) {
if (raster.getSample(j, i, 0) == 0) {
if (raster.getSample(j+1, i, 0) == 1
|| raster.getSample(j-1, i, 0) == 1
|| raster.getSample(j, i+1, 0) == 1
|| raster.getSample(j, i-1, 0) == 1) {
perimeter++;
}
}
}
}
基本上,在你的double-for-loop中,你正在检查当前元素的邻居(上面,下面,左边和右边的邻居)。这意味着需要左侧,右侧,上方和下方邻居才能使代码正常工作。所以我们不能在边界元素上运行循环(任何可能没有左,右,上或下邻居的元素)。
所以我的解决方案是改变for循环,以便跳过边界元素。如果您还需要检查边界元素,那么您可能需要对for循环内部进行一些更改。