started work on correcting HSV values

This commit is contained in:
2018-06-29 09:36:05 +02:00
parent d0a127aec0
commit 0ab0af257d
3 changed files with 21 additions and 8 deletions

View File

@@ -8,7 +8,7 @@ import cv2
from .imagereaders import VideoReader, NaoImageReader, PictureReader from .imagereaders import VideoReader, NaoImageReader, PictureReader
from .finders import GoalFinder, BallFinder, FieldFinder from .finders import GoalFinder, BallFinder, FieldFinder
from .utils import read_config, imresize from .utils import read_config, imresize, hsv_mask
class Colorpicker(object): class Colorpicker(object):
@@ -19,10 +19,12 @@ class Colorpicker(object):
parameters = ['low_h', 'low_s', 'low_v', 'high_h', 'high_s', 'high_v'] parameters = ['low_h', 'low_s', 'low_v', 'high_h', 'high_s', 'high_v']
maxes = [180, 255, 255, 180, 255, 255] maxes = [180, 255, 255, 180, 255, 255]
checkers = [ 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_s'] - 1), # LOW S
lambda x: min(x, self.settings['high_v'] - 1), # LOW V 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_s'] + 1), # HIGH S
lambda x: max(x, self.settings['low_v'] + 1), # HIGH V lambda x: max(x, self.settings['low_v'] + 1), # HIGH V
] ]
@@ -89,7 +91,7 @@ class Colorpicker(object):
frame = self.marker.draw(frame, stuff) frame = self.marker.draw(frame, stuff)
else: else:
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
thr = cv2.inRange( thr = hsv_mask(
hsv, hsv,
tuple(map(self.settings.get, ('low_h', 'low_s', 'low_v'))), tuple(map(self.settings.get, ('low_h', 'low_s', 'low_v'))),
tuple(map(self.settings.get, ('high_h', 'high_s', 'high_v'))) tuple(map(self.settings.get, ('high_h', 'high_s', 'high_v')))
@@ -191,7 +193,7 @@ if __name__ == '__main__':
parser.add_argument( parser.add_argument(
'--target', '--target',
help='specify for what target is being calibrated', help='specify for what target is being calibrated',
default='field' default=None
) )
args = parser.parse_args() args = parser.parse_args()

View File

@@ -17,16 +17,16 @@ print('u, i, o: increase h, s, v respectively\n',
while True: while True:
image[:] = h, s, v image[:] = h, s, v
im2show = cv2.cvtColor(image, cv2.COLOR_HSV2BGR) im2show = cv2.cvtColor(image, cv2.COLOR_HSV2BGR)
print('HSV:', h, s, v, ' ', end='\r') print(' HSV:', h, s, v, ' ', end='\r')
sys.stdout.flush() sys.stdout.flush()
cv2.imshow(window, im2show) cv2.imshow(window, im2show)
key = cv2.waitKey(0) key = cv2.waitKey(0)
if key == ord('q'): if key == ord('q'):
break break
elif key == ord('u'): elif key == ord('u'):
h = min(h + 1, 180) h = (h + 1) % 180
elif key == ord('j'): elif key == ord('j'):
h = max(h - 1, 0) h = (h - 1) % 180
elif key == ord('i'): elif key == ord('i'):
s = min(s + 1, 255) s = min(s + 1, 255)
elif key == ord('k'): elif key == ord('k'):

View File

@@ -29,3 +29,14 @@ def imresize(frame, width=None, height=None):
sf = 0 sf = 0
sz = (width, height) sz = (width, height)
return cv2.resize(frame, sz, fx=sf, fy=sf) 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))