started work on correcting HSV values
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -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'):
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user