我正在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;
}
答案 0 :(得分:0)
您的horizontalHistogram []使用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的图片,没有错误。谢谢