2015-03-19 7 views
-2

Я создаю проект ImageProcessing на NetbeansIDE. Я получаю ошибку ArrayIndexOutOfBoundsException как функцию программы. У меня нет понять причину ошибки. Я читал подобную тему, но не смог найти решение. Я даю функцию. Пожалуйста, помогите мне.Ошибка Java 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; 
    } 
+2

Где происходит исключение? Вы должны добавить трассировку стека к вопросу. – Bubletan

ответ

0

Ваш horizontalHistogram [] инициализируется resim.getWidth(), но в цикле birightnes ваши показатели связаны resim.getHeight().

То же самое касается вертикальных. Поэтому, если ваша высота! = Ширина, вы получите доступ к одному из массивов за пределами границ.

+0

Я сделал то, что вы сказали, но результат не изменился. –

+0

stacktrace сообщит вам, где у вас есть ваша ошибка. Ваш второй цикл для обнаружения max также имеет границы индексов, испорченные. – Zielu

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; 
    } 
+1

Я бы добавил некоторое объяснение, почему это правильное решение. Я не спустил вас вниз, но я предполагаю, что именно поэтому вы получили нижний план. – b4hand

+1

Я также пробовал вашу рекомендацию, но результат отрицательный –

+0

Извините, я думал, этого достаточно для решения проблемы :) thanx для вашего объяснения (@ b4hand), я понятия не имел, почему это было приостановлено. Спасибо @ MuhammedYusufTaşkesenligil – Sanira

0

Я решил проблему. Размер моего ярлыка составляет 150 * 150, но я старался дать большую картинку. Теперь я даю изображение 150 * 150 и никаких ошибок. Спасибо