|
@@ -2,30 +2,23 @@ import cv2
|
|
|
import numpy as np
|
|
|
import math
|
|
|
|
|
|
-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):
|
|
|
+ e1 = cv2.getTickCount()
|
|
|
markers = []
|
|
|
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
|
|
- img3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 125, 10)
|
|
|
-
|
|
|
+ img3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 25, 10)
|
|
|
+
|
|
|
+ print("threshold", (cv2.getTickCount() - e1)/ cv2.getTickFrequency())
|
|
|
kernel = np.ones((6,6),np.uint8)
|
|
|
img2 = cv2.morphologyEx(img3, cv2.MORPH_CLOSE, kernel)
|
|
|
+ print("close", (cv2.getTickCount() - e1)/ cv2.getTickFrequency())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kernel = np.ones((3,3),np.uint8)
|
|
|
img2 = cv2.dilate(img2,kernel, 2)
|
|
|
-
|
|
|
+ print("dilate", (cv2.getTickCount() - e1)/ cv2.getTickFrequency())
|
|
|
|
|
|
params = cv2.SimpleBlobDetector_Params()
|
|
|
params.filterByInertia = False
|
|
@@ -38,7 +31,7 @@ def getCMarkers (img):
|
|
|
|
|
|
|
|
|
params.filterByArea = True
|
|
|
- params.minArea = 20
|
|
|
+ params.minArea = 10
|
|
|
params.minDistBetweenBlobs = 1
|
|
|
|
|
|
|
|
@@ -52,6 +45,7 @@ def getCMarkers (img):
|
|
|
|
|
|
params.filterByInertia = True
|
|
|
params.minInertiaRatio = 0.2
|
|
|
+ params.filterByColor = False
|
|
|
|
|
|
|
|
|
detector = cv2.SimpleBlobDetector_create(params)
|
|
@@ -60,11 +54,15 @@ def getCMarkers (img):
|
|
|
|
|
|
keypoints = detector.detect(img2)
|
|
|
|
|
|
+
|
|
|
+ print("blob", (cv2.getTickCount() - e1)/ cv2.getTickFrequency())
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
k = []
|
|
|
- kk = []
|
|
|
+ kk = []
|
|
|
+
|
|
|
for point in keypoints:
|
|
|
count = []
|
|
|
for p in keypoints:
|
|
@@ -76,6 +74,7 @@ def getCMarkers (img):
|
|
|
k.append((point.pt, count))
|
|
|
kk.append(point)
|
|
|
|
|
|
+ print("near", (cv2.getTickCount() - e1)/ cv2.getTickFrequency())
|
|
|
for point in k:
|
|
|
p, near = point
|
|
|
|
|
@@ -101,8 +100,7 @@ def getCMarkers (img):
|
|
|
trans = get_transform_matrix_points(conners, [10, 10], 10)
|
|
|
code = cv2.warpPerspective(gray, trans, dsize=(100, 100))
|
|
|
|
|
|
-
|
|
|
- number = getNumber(code, 150)
|
|
|
+ number = getNumber(code, 130)
|
|
|
if number == False:
|
|
|
continue
|
|
|
|
|
@@ -128,8 +126,8 @@ def getNumber(img, threshold):
|
|
|
for hs in hsplit:
|
|
|
m.append(np.mean(hs))
|
|
|
mean.append(m)
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
mean = np.array(mean) >= threshold
|
|
|
valid = mean[0, 0] == False
|
|
|
valid = valid and mean[0, 3] == False
|