2009-06-26 2 views
1

Я хочу прочитать изображение в формате JPEG с однородным серым фоном с несколькими цветными шарами на нем того же размера. Я хочу программу, которая может взять это изображение и записать координаты каждого шара. Каков наилучший способ сделать это?Чтение изображения в формате JPEG и вычисление координат изображения

+6

Чтение в формате JPEG и распознавание изображений на нем - это два очень разных вопроса на самых разных уровнях. –

+0

Согласовано. Я бы предложил другое название для вашего вопроса. – Randyaa

ответ

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.

 Смежные вопросы

  • Нет связанных вопросов^_^