Files
@ fc8be31ce773
Branch filter:
Location: OneEye/src/image_analyzer.py - annotation
fc8be31ce773
1.5 KiB
text/x-python
added intensity slider
42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 fc8be31ce773 fc8be31ce773 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 42f4533a5029 | from go import *
class ImageAnalyzer:
def __init__(self):
self.board=[[Go.EMPTY]*19 for r in range(19)]
self.grid=None
def analyze(self,image,tresB,tresW,sizeCoef,shift):
if self.grid==None: return False
for r in range(19):
for c in range(19):
intersection=self.grid.intersections[r][c]
if c>0: stoneWidth=sizeCoef*(intersection.x-self.grid.intersections[r][c-1].x)
else: stoneWidth=sizeCoef*(self.grid.intersections[r][c+1].x-intersection.x)
if r>0: stoneHeight=sizeCoef*(intersection.y-self.grid.intersections[r-1][c].y)
else: stoneHeight=sizeCoef*(self.grid.intersections[r+1][c].y-intersection.y)
self.board[r][c]=self.analyzePoint(image,intersection*sizeCoef+shift,stoneWidth,stoneHeight,tresB,tresW)
def analyzePoint(self,image,imageCoords,stoneWidth,stoneHeight,tresB,tresW):
b=w=e=0
cmax=max(int(stoneWidth*2//7),2) # !! optimal parameters subject to further research
rmax=max(int(stoneHeight*2//7),2)
for r in range(-rmax,rmax+1):
for c in range(-cmax,cmax+1):
red,green,blue=image.getpixel((imageCoords.x+c,imageCoords.y+r))
I=(red+green+blue)/255/3
m=min(red,green,blue)
S=1-m/I
if 100*I<tresB: b+=1
elif 100*I>tresW: w+=1
else: e+=1
if b>=w and b>=e: return Go.BLACK
if w>=b and w>=e: return Go.WHITE
return Go.EMPTY
def setGrid(self,grid):
self.grid=grid
|