diff --git a/exp/board_detect.py b/exp/board_detect.py --- a/exp/board_detect.py +++ b/exp/board_detect.py @@ -13,7 +13,7 @@ import scipy.cluster import scipy.ndimage import scipy.signal -from polar_hough import PolarHough +from geometry import Line from annotations import DataFile,computeBoundingBox from hough import show,prepareEdgeImg,HoughTransform from analyzer.epoint import EPoint @@ -111,8 +111,13 @@ class BoardDetector: cv.circle(stonesImg,(int(point.x),int(point.y)),2,255,-1) # cv.drawContours(stonesImg,[c for (point,c) in stones],-1,255,-1) show(stonesImg,"detected stones") - hough.update(stonesImg,5) - hough.extract() + hough.update(stonesImg,10) + lines=hough.extract() + + linesImg=np.copy(rect) + for line in lines: + self._drawLine(linesImg,line) + show(linesImg,"detected lines") # # detect vanishing points of the lines # imgCenter=EPoint(w//2-x1, h//2-y1) @@ -222,6 +227,24 @@ class BoardDetector: return matrix + def _drawLine(self,img,line): + (h,w)=img.shape[:2] + corners=[EPoint(0,0),EPoint(w,0),EPoint(0,h),EPoint(w,h)] # NW NE SW SE + borders=[ + [Line.fromPoints(corners[0],corners[1]), Line.fromPoints(corners[2],corners[3])], # N S + [Line.fromPoints(corners[0],corners[2]), Line.fromPoints(corners[1],corners[3])] # W E + ] + + (a,b)=(line.intersect(borders[0][0]), line.intersect(borders[0][1])) + log.debug("%s %s",line,(a,b)) + if not a or not b: + (a,b)=(line.intersect(borders[1][0]), line.intersect(borders[1][1])) + log.debug("* %s %s",line,(a,b)) + if any(abs(x)>10**5 for x in [*a,*b]): + log.debug("ignored") + return + cv.line(img,(int(a.x),int(a.y)),(int(b.x),int(b.y)),[0,255,0]) + if __name__=="__main__": detector=BoardDetector(sys.argv[2])