|
@@ -3,6 +3,16 @@ import numpy as np
|
|
import math
|
|
import math
|
|
from numpy.linalg import norm
|
|
from numpy.linalg import norm
|
|
|
|
|
|
|
|
+validcheck = [[False, True, False, False],
|
|
|
|
+[False, True, True, False],
|
|
|
|
+[False, False, True, False],
|
|
|
|
+[True, False, True, True],
|
|
|
|
+[True, False, True, False],
|
|
|
|
+[True, True, False, False],
|
|
|
|
+[True, True, False, True],
|
|
|
|
+[True, False, False, True]]
|
|
|
|
+
|
|
|
|
+
|
|
def getCMarkers (img):
|
|
def getCMarkers (img):
|
|
markers = []
|
|
markers = []
|
|
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
|
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
|
@@ -67,10 +77,6 @@ def getCMarkers (img):
|
|
k.append((point.pt, count))
|
|
k.append((point.pt, count))
|
|
kk.append(point)
|
|
kk.append(point)
|
|
|
|
|
|
-
|
|
|
|
- img2 = cv2.drawKeypoints(img2, kk, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
|
|
|
|
- cv2.imshow("m3", img2)
|
|
|
|
-
|
|
|
|
for point in k:
|
|
for point in k:
|
|
p, near = point
|
|
p, near = point
|
|
|
|
|
|
@@ -85,38 +91,38 @@ def getCMarkers (img):
|
|
v = np.array([p2[0]-p[0], p2[1]-p[1]])
|
|
v = np.array([p2[0]-p[0], p2[1]-p[1]])
|
|
c = np.dot(u,v)/norm(u)/norm(v)
|
|
c = np.dot(u,v)/norm(u)/norm(v)
|
|
angle = np.arccos(c)
|
|
angle = np.arccos(c)
|
|
- if abs(angle) > midistance:
|
|
+ if abs(angle-math.pi/2.0) < math.pi/10.0:
|
|
bottom = p1
|
|
bottom = p1
|
|
rigth = p2
|
|
rigth = p2
|
|
- midistance = abs(angle-math.pi/2.0)
|
|
+
|
|
-
|
|
+
|
|
- if midistance == math.pi/10:
|
|
+ conner = rigth+u
|
|
- continue
|
|
+ addu = u/6.0
|
|
-
|
|
+ addv = v/6.0
|
|
- u = np.array([bottom[0]-p[0], bottom[1]-p[1]])
|
|
+ conners = [p-addu-addv, bottom+addu-addv, rigth-addu+addv, conner+addu+addv]
|
|
- v = np.array([rigth[0]-p[0], rigth[1]-p[1]])
|
|
+ trans = get_transform_matrix_points(conners, [10, 10], 10)
|
|
- if u[1] > v[1]:
|
|
+ code = cv2.warpPerspective(gray, trans, dsize=(100, 100))
|
|
- u,v = v,u
|
|
+
|
|
- conner = rigth+u
|
|
+
|
|
- addu = u*1.0/6.0
|
|
+ number = getNumber(code, 150)
|
|
- addv = v*1.0/6.0
|
|
+ if number == False:
|
|
- conners = [p-addu-addv, bottom+addu-addv, rigth-addu+addv, conner+addu+addv]
|
|
+ continue
|
|
- trans = get_transform_matrix_points(conners, [10, 10], 10)
|
|
+ uvalid, vvalid = u >= 0, v > 0
|
|
- code = cv2.warpPerspective(gray, trans, dsize=(100, 100))
|
|
+ valid = [uvalid[0], uvalid[1], vvalid[0], vvalid[1]]
|
|
-
|
|
+
|
|
- cv2.imshow("m2", code)
|
|
+ if valid not in validcheck:
|
|
-
|
|
+ continue
|
|
- number = getNumber(code, 150)
|
|
+
|
|
- if number == False:
|
|
+
|
|
- continue
|
|
+ uu = np.array([0, 1])
|
|
-
|
|
+ angle = np.math.atan2(np.linalg.det([v,uu]),np.dot(v,uu))
|
|
- uu = np.array([0, 1])
|
|
+
|
|
- vv = np.array([p[0]-bottom[0], p[1]-bottom[1]])
|
|
+ mid = p+u*0.5+v*0.5
|
|
- c = np.dot(uu,vv)/norm(uu)/norm(vv)
|
|
+ if number != 0:
|
|
- angle = np.arccos(c)
|
|
+ markers.append([number, mid, angle])
|
|
- mid = p+u*0.5+v*0.5
|
|
+
|
|
- if number != 0:
|
|
+ img2 = cv2.drawKeypoints(img2, kk, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
|
|
- markers.append([number, mid, angle])
|
|
+ cv2.imshow("m3", img2)
|
|
return markers
|
|
return markers
|
|
|
|
|
|
def getNumber(img, threshold):
|
|
def getNumber(img, threshold):
|