2012-01-16 4 views
1

나는 보석으로 장식 한 게임 (8x8 보드)의 스크린 샷을 찍고 스크린 샷에서 보드 위치를 추출하려고합니다. Image/Imagestat, autopy 및 슬롯 중간에서 개별 픽셀을 가져 왔지만이 방법은 효과가 없습니다. 그래서 저는 8x8 격자의 각 사각형에 대한 평균값을 취하여 각 조각을 식별 할 수 있다고 생각합니다. 그러나 Image/Imagestat 및 Autopy를 사용하여 수행 할 수 없었습니다.스크린 샷의 이미지 처리 - Python

이미지의 한 영역에 대한 픽셀 값이나 색상 값을 얻는 방법을 아는 사람이 있습니까? 또는 지배적 인 색으로 이미지의 세그먼트를 식별하는 더 나은 방법?

답변

1

Imagegrab 및 ImageStat를 사용하여 PIL로이 작업을 수행하는 방법을 발견했습니다. 여기서, 게임 화면으로 화면 작물 잡아 같습니다

def getScreen(): 
    # Grab image and crop it to the desired window. Find pixel borders manually. 
    box = (left, top, right, bottom)   
    im = ImageGrab.grab().crop(box) 
    #im.save('testcrop.jpg') # optionally save your crop 

    for y in reversed(range(8)): 
     for x in reversed(range(8)): 
      #sqh,sqw are the height and width of each piece. 
      #each pieceim is one of the game piece squares 
      piecebox = (sqw*(x), sqh*(y), sqw*(x+1), sqh*(y+1)) 
      pieceim = im.crop(piecebox) 
      #pieceim.save('piececrop_xy_'+ str(x) + str(y) + '.jpg') 

      stats = ImageStat.Stat(pieceim) 
      statsmean = stats.mean 
      Rows[x][y] = whichpiece(statsmean) 

상기 모든 64 개에 대한 이미지를 생성 piecetype 식별, 저장 어레이 "행"의 배열이다. 그런 다음 각 piecetype에 대해 stats.mean을 사용하여 평균 RGB 값을 가져 와서 사전 (rgbdict)에 저장했습니다. 모든 출력을 Excel로 복사하고 색상 유형별로 필터링하여 평균을 구하십시오. 그런 다음 RSS 방법과 사전을 사용하여 이미지를 알려진 피씨 유형과 통계적으로 일치시킵니다. (RSS 심판 : http://www.charlesrcook.com/archive/2010/09/05/creating-a-bejeweled-blitz-bot-in-c.aspx) 화면 긁어 수 이들 두 기능

rgbdict = { 
      'blue':[65.48478993, 149.0030965, 179.4636593], #1 
      'red':[105.3613444,55.95710092, 36.07481793], #2 
      ...... 
      } 
def whichpiece(statsmean): 
     bestScore = 100 
     curScore= 0 
     pieceColor = 'empty' 
     for key in rgbdict.keys(): 
      curScore = (math.pow((statsmean[0]/255) - (rgbdict[key][0]/255), 2) 
       + math.pow((statsmean[1]/255) - (rgbdict[key][1]/255), 2) 
       + math.pow((statsmean[2]/255) - (rgbdict[key][2]/255), 2)) 
      if curScore < bestScore: 
       pieceColor = key 
       bestScore = curScore 
     return piececolor 

및 이동 결정 될 수있는 배열로 전사 기판의 상태. 이게 누구에게나 도움이된다면 행운을 빈다. 이동 피커를 미세 조정하면 알려줘.