From 0ab0af257d9afe2a373289a979f1aeca90b7be6d Mon Sep 17 00:00:00 2001 From: Pavel Lutskov Date: Fri, 29 Jun 2018 09:36:05 +0200 Subject: [PATCH] started work on correcting HSV values --- pykick/colorpicker.py | 12 +++++++----- pykick/hsv_render.py | 6 +++--- pykick/utils.py | 11 +++++++++++ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/pykick/colorpicker.py b/pykick/colorpicker.py index fcfb9c1..4ac2aae 100644 --- a/pykick/colorpicker.py +++ b/pykick/colorpicker.py @@ -8,7 +8,7 @@ import cv2 from .imagereaders import VideoReader, NaoImageReader, PictureReader from .finders import GoalFinder, BallFinder, FieldFinder -from .utils import read_config, imresize +from .utils import read_config, imresize, hsv_mask class Colorpicker(object): @@ -19,10 +19,12 @@ class Colorpicker(object): parameters = ['low_h', 'low_s', 'low_v', 'high_h', 'high_s', 'high_v'] maxes = [180, 255, 255, 180, 255, 255] checkers = [ - lambda x: min(x, self.settings['high_h'] - 1), # LOW H + lambda x: x, # LOW H + # lambda x: min(x, self.settings['high_h'] - 1), # LOW H lambda x: min(x, self.settings['high_s'] - 1), # LOW S lambda x: min(x, self.settings['high_v'] - 1), # LOW V - lambda x: max(x, self.settings['low_h'] + 1), # HIGH H + lambda x: x, # HIGH H + # lambda x: max(x, self.settings['low_h'] + 1), # HIGH H lambda x: max(x, self.settings['low_s'] + 1), # HIGH S lambda x: max(x, self.settings['low_v'] + 1), # HIGH V ] @@ -89,7 +91,7 @@ class Colorpicker(object): frame = self.marker.draw(frame, stuff) else: hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) - thr = cv2.inRange( + thr = hsv_mask( hsv, tuple(map(self.settings.get, ('low_h', 'low_s', 'low_v'))), tuple(map(self.settings.get, ('high_h', 'high_s', 'high_v'))) @@ -191,7 +193,7 @@ if __name__ == '__main__': parser.add_argument( '--target', help='specify for what target is being calibrated', - default='field' + default=None ) args = parser.parse_args() diff --git a/pykick/hsv_render.py b/pykick/hsv_render.py index cc270ec..3e921fe 100644 --- a/pykick/hsv_render.py +++ b/pykick/hsv_render.py @@ -17,16 +17,16 @@ print('u, i, o: increase h, s, v respectively\n', while True: image[:] = h, s, v im2show = cv2.cvtColor(image, cv2.COLOR_HSV2BGR) - print('HSV:', h, s, v, ' ', end='\r') + print(' HSV:', h, s, v, ' ', end='\r') sys.stdout.flush() cv2.imshow(window, im2show) key = cv2.waitKey(0) if key == ord('q'): break elif key == ord('u'): - h = min(h + 1, 180) + h = (h + 1) % 180 elif key == ord('j'): - h = max(h - 1, 0) + h = (h - 1) % 180 elif key == ord('i'): s = min(s + 1, 255) elif key == ord('k'): diff --git a/pykick/utils.py b/pykick/utils.py index 7ee628b..35e951b 100644 --- a/pykick/utils.py +++ b/pykick/utils.py @@ -29,3 +29,14 @@ def imresize(frame, width=None, height=None): sf = 0 sz = (width, height) return cv2.resize(frame, sz, fx=sf, fy=sf) + + +def hsv_mask(hsv, hsv_lower, hsv_upper): + if hsv_lower[0] > hsv_upper[0]: + mask_l = cv2.inRange(hsv, tuple(hsv_lower), + tuple([180] + hsv_upper[1:])) + mask_u = cv2.inRange(hsv, tuple([0] + hsv_lower[1:]), + tuple(hsv_upper)) + return cv2.add(mask_l, mask_u) + else: + return cv2.inRange(hsv, tuple(hsv_lower), tuple(hsv_upper))