Я хочу прочитать изображение в формате JPEG с однородным серым фоном с несколькими цветными шарами на нем того же размера. Я хочу программу, которая может взять это изображение и записать координаты каждого шара. Каков наилучший способ сделать это?Чтение изображения в формате JPEG и вычисление координат изображения
1
A
ответ
0
Вы можете использовать библиотеку ImageIO для чтения в изображении с использованием одного из методов read(). Это создает BufferedImage, который вы можете анализировать для отдельных цветов. getRGB(), вероятно, лучший способ сделать это. Вы можете сравнить это с getRGB() объекта Color, если вам нужно. Этого должно быть достаточно, чтобы вы начали.
2
Я согласен с Джеймсом. Я использовал следующую программу один раз, чтобы найти красные коробки в изображении (прежде чем большинство красных ящиков были перекрасило сообщество):
/**
* @author karnokd, 2008.11.07.
* @version $Revision 1.0$
*/
public class RedLocator {
public static class Rect {
int x;
int y;
int x2;
int y2;
}
static List<Rect> rects = new LinkedList<Rect>();
static boolean checkRect(int x, int y) {
for (Rect r : rects) {
if (x >= r.x && x <= r.x2 && y >= r.y && y <= r.y2) {
return true;
}
}
return false;
}
public static void main(String[] args) throws Exception {
BufferedImage image = ImageIO.read(new File("fallout3worldmapfull.png"));
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
int c = image.getRGB(x,y);
int red = (c & 0x00ff0000) >> 16;
int green = (c & 0x0000ff00) >> 8;
int blue = c & 0x000000ff;
// check red-ness
if (red > 180 && green < 30 && blue < 30) {
if (!checkRect(x, y)) {
int tmpx = x;
int tmpy = y;
while (red > 180 && green < 30 && blue < 30) {
c = image.getRGB(tmpx++,tmpy);
red = (c & 0x00ff0000) >> 16;
green = (c & 0x0000ff00) >> 8;
blue = c & 0x000000ff;
}
tmpx -= 2;
c = image.getRGB(tmpx,tmpy);
red = (c & 0x00ff0000) >> 16;
green = (c & 0x0000ff00) >> 8;
blue = c & 0x000000ff;
while (red > 180 && green < 30 && blue < 30) {
c = image.getRGB(tmpx,tmpy++);
red = (c & 0x00ff0000) >> 16;
green = (c & 0x0000ff00) >> 8;
blue = c & 0x000000ff;
}
Rect r = new Rect();
r.x = x;
r.y = y;
r.x2 = tmpx;
r.y2 = tmpy - 2;
rects.add(r);
}
}
}
}
}
}
может дать вам несколько советов. Изображение происходит от here.
Чтение в формате JPEG и распознавание изображений на нем - это два очень разных вопроса на самых разных уровнях. –
Согласовано. Я бы предложил другое название для вашего вопроса. – Randyaa