From 211f835413daccca3873692d3e9e93f0aab4d781 Mon Sep 17 00:00:00 2001 From: Pavel Lutskov Date: Wed, 20 Jun 2018 21:04:37 +0200 Subject: [PATCH] masking out the field somewhat more intelligently --- pykick/detection_demo.py | 3 +-- pykick/utils.py | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pykick/detection_demo.py b/pykick/detection_demo.py index 306a153..a74c829 100644 --- a/pykick/detection_demo.py +++ b/pykick/detection_demo.py @@ -104,8 +104,7 @@ if __name__ == '__main__': cv2.bitwise_and(frame, frame, mask=field)) goal_finder.draw(frame, goal) ball_finder.draw(frame, ball) - cv2.imshow(window_name, - cv2.bitwise_and(frame, frame, mask=field)) + cv2.imshow(window_name, frame) key = cv2.waitKey(0 if args.manual else 1) if key == ord('q') or key == 27: diff --git a/pykick/utils.py b/pykick/utils.py index a7cc1a8..4b9fe06 100644 --- a/pykick/utils.py +++ b/pykick/utils.py @@ -4,6 +4,7 @@ import os import json import cv2 +import numpy as np HERE = os.path.dirname(os.path.realpath(__file__)) @@ -34,8 +35,17 @@ def field_mask(frame, hsv_lower, hsv_upper): hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) blurred = cv2.GaussianBlur(hsv, (25, 25), 20) thr = cv2.inRange(blurred, tuple(hsv_lower), tuple(hsv_upper)) + thr = cv2.erode(thr, None, iterations=4) + thr = cv2.dilate(thr, None, iterations=8) + cnts, _ = cv2.findContours(thr.copy(), cv2.RETR_EXTERNAL, + cv2.CHAIN_APPROX_SIMPLE) + field = max(cnts, key=cv2.contourArea) + field = cv2.convexHull(field) + # print(field) + mask = np.zeros(thr.shape, dtype=np.uint8) + print(mask.dtype) + thr = cv2.cvtColor(thr, cv2.COLOR_GRAY2BGR) + cv2.drawContours(mask, (field,), -1, 255, -1) # The ususal - thr = cv2.erode(thr, None, iterations=6) - thr = cv2.dilate(thr, None, iterations=20) - return thr + return mask