Java ImageProcessing“ArrayIndexOutOfBoundsException”错误

时间:2015-03-19 14:10:33

标签: java netbeans project bufferedimage

我正在NetbeansIDE上创建一个ImageProcessing项目。我得到一个ArrayIndexOutOfBoundsException错误的程序函数。我不 了解错误的原因。我读了类似的话题,但我不能 找到解决方案。我给出了这个功能。请帮帮我。

我想检测脸部图像中的眼睛和鼻子。首先保存水平和垂直直方图阵列中的所有像素亮度。然后,我扫描数组并找到最亮的像素。最后,我画了像素的黑色。

我的英语不完美,所以我很抱歉。

public BufferedImage detectHistograms(BufferedImage resim){        
        int[] horizontalHistogram = new int[resim.getWidth()];
        int[] verticalHistogram = new int[resim.getHeight()];

        //first assigment to histogram arrays
        for(int i=0; i<=horizontalHistogram.length-1; i++){
            horizontalHistogram[i]=0;
            verticalHistogram[i]=0;
        }

        //take the brightness values of the image
        for(int i=0; i<=resim.getHeight()-1; i++){
            for(int j=0; j<=resim.getWidth()-1; j++){
                horizontalHistogram[i] += resim.getRGB(j, i);
                verticalHistogram[j] += resim.getRGB(j, i);
            }
        }

        //detect max vertical and horizontal histograms
        int araDegiskenYatay = 0;
        int araDegiskenDikey = 0;
        int maxYatayPiksel = 0;
        int maxDikeyPiksel = 0;
        for(int i=0; i<=horizontalHistogram.length-1; i++){
            if(horizontalHistogram[i] > araDegiskenYatay){
                araDegiskenYatay = horizontalHistogram[i];
                maxYatayPiksel = i;
            }
        }
        for(int i=0; i<=verticalHistogram.length-1; i++){
            if(horizontalHistogram[i] > araDegiskenDikey){
                araDegiskenDikey = verticalHistogram[i];
                maxDikeyPiksel = i;
            }
        }

        //paint black of detect max and min histogram pixels
        Color newColor = new Color(0,0,0);
        for(int i=0; i<=resim.getWidth()-1; i++){
            for(int j=0; j<=resim.getHeight()-1; j++){
                resim.setRGB(maxYatayPiksel, maxDikeyPiksel,newColor.getRGB() );
            }
        }

        return resim;
    }

3 个答案:

答案 0 :(得分:0)

您的horizo​​ntalHistogram []使用resim.getWidth()初始化,但在birightnes循环中,索引由resim.getHeight()绑定。

垂直相同。因此,如果你的身高!=宽度,你将访问界限之外的一个数组。

答案 1 :(得分:0)

for(int i=0; i<=horizontalHistogram.length-1; i++){
        horizontalHistogram[i]=0;
    }
 for(int i=0; i<=verticalHistogram.length-1; i++){
        verticalHistogram[i]=0;
    }

答案 2 :(得分:0)

我解决了这个问题。我的图片标签尺寸是150 * 150,但我试图给出更大的图片。现在,我给出了150 * 150的图片,没有错误。谢谢