Я пытаюсь вычислить края черного объекта в файле .png. И под этим я имею в виду найти значения столбца и строки, которые составляют ящик, который инкапсулирует объект. Я прикрепил ссылку на фотографию, которую я создал, которая рисует окно в соответствии со значениями, которые я нахожу. Как видите, верхняя, нижняя и правая линии выглядят правильно, но если вы увеличиваете масштаб до левой строки, часть изображения находится за пределами поля. Почему это? У меня есть алгоритм, который я буду размещать ниже, который ищет каждый пиксель в массиве и находит последнее вхождение значений пикселей! = 0 для верхней, нижней, левой и правой сторон. По какой-то причине дополнительное изображение с левой стороны регистрирует пиксели, которые == 0 ... Величины округляются до нуля? Если кто-то может объяснить, что происходит, это будет здорово.BufferedImage to 2D Array: Поиск пиксельных краев
Ссылка на изображение: http://i.imgur.com/UG8Cghe.png. Вам действительно нужно увеличивать масштаб с левой стороны, чтобы увидеть, о чем я говорю. Скачивание изображения и просмотр, вероятно, необходимо. Это ОЧЕНЬ маленькая деталь.
Вот метод, который преобразует BufferedImage (.png) к 2D массива:
private static int[][] loadImageTo2D(String file_path)
{
img = null;
try { img = ImageIO.read(new File(file_path)); }
catch (IOException e) { System.out.println(e); }
int width = img.getWidth();
int height = img.getHeight();
int[][] pix = new int[height][width];
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
pix[row][col] = img.getRGB(col, row);
}//for
}//for
return pix;
}//loadImageTo2D
Вот как я ищу для сторон:
private static int[] getPerim(int[][] pix)
{
//Array holds object boundary edges.
int[] lines = new int[4];
lines[BOTTOM] = 0;
lines[TOP] = pix.length;
lines[LEFT] = pix[0].length;
lines[RIGHT] = 0;
//Top down iteration, find the first and last row and column of the
//actual graphic.
for (int row = 0; row < pix.length; row++)
{
for(int col = 0; col < pix[0].length; col++)
{
if (pix[row][col] != 0)
{
if (row < lines[TOP]) { lines[TOP] = row; }
else if (row > lines[BOTTOM]) { lines[BOTTOM] = row; }
else if (col < lines[LEFT]) { lines[LEFT] = col; }
else if (col > lines[RIGHT]) { lines[RIGHT] = col; }
}//if
}//for
}//for
return lines;
}//getPerim
Я тогда с использованием линии [], чтобы нарисовать синий квадрат, который вы видите на изображении. Помогите!