2009-06-26 4 views
1

같은 크기의 여러 색깔의 볼이있는 균일 한 회색 배경의 JPEG 이미지를 읽고 싶습니다. 이 이미지를 가지고 각 공의 좌표를 기록 할 수있는 프로그램이 필요합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?JPEG 이미지를 읽고 이미지 좌표를 계산하십시오.

+6

JPEG 이미지를 읽고 이미지 인식을 수행하는 것은 매우 다른 두 가지 질문입니다. –

+0

동의. 귀하의 질문에 다른 제목을 제안하고 싶습니다. – Randyaa

답변

0

ImageIO 라이브러리를 사용하면 read() 메서드 중 하나를 사용하여 이미지를 읽을 수 있습니다. 이렇게하면 BufferedImage이 생성되며이 색상을 별도의 색상으로 분석 할 수 있습니다. getRGB()가이를 수행하는 가장 좋은 방법 일 것입니다. 필요한 경우 Color 객체의 getRGB()와 비교할 수 있습니다. 그게 너를 시작하게하는데 충분할거야.

2

나는 James에게 동의합니다. 나는 (빨간색 상자의 대부분이 사회 칠한되기 전에) 이미지에서 빨간색 상자를 발견 한 번 다음과 같은 프로그램을 사용 :

/** 
* @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에서 유래했습니다.

관련 문제