Move pixel shift to separate method. Change upper_skin
This commit is contained in:
@@ -26,27 +26,25 @@ class SimpleHandRecogniser(HandRecogniser):
|
||||
"""
|
||||
Segments the hand from the rest of the image to get a threshold.
|
||||
"""
|
||||
# Need to shift red pixels so they can be 0-20 rather than 250-~20
|
||||
self.img_hsv[:,:,0] = self.img_hsv[:,:,0] + 30
|
||||
self.img_hsv[:,:,0] = np.where(self.img_hsv[:,:,0] > 179, self.img_hsv[:,:,0] - 179, self.img_hsv[:,:,0])
|
||||
|
||||
self.img_hsv = cv2.GaussianBlur(self.img_hsv,(5,5),0)
|
||||
|
||||
lower_skin = (0, 0, 153)
|
||||
upper_skin = (50, 153, 255)
|
||||
upper_skin = (45, 153, 255)
|
||||
|
||||
# Only need mask, as we can just use this to do the hand segmentation.
|
||||
self.mask = cv2.inRange(self.img_hsv, lower_skin, upper_skin)
|
||||
|
||||
# Apply another blur to rmeove any small holes/noise
|
||||
self.mask = self.__denoise(self.mask)
|
||||
ret, self.mask = cv2.threshold(self.mask, 50, 255, cv2.THRESH_BINARY)
|
||||
|
||||
def __denoise(self, image):
|
||||
"""
|
||||
Applies a 5x5 gaussian blur to remove noise from the image.
|
||||
"""
|
||||
image = cv2.GaussianBlur(image,(5,5),0)
|
||||
return cv2.GaussianBlur(image,(5,5),0)
|
||||
|
||||
def __calc_circle(self, image, radius_percent = 0.55):
|
||||
def __calc_circle(self, image, radius_percent = 0.52):
|
||||
"""
|
||||
Calculates the equation of the circle (radius, centre) from a given
|
||||
threshold image, so that the circle is the center of gravity of the
|
||||
@@ -91,15 +89,24 @@ class SimpleHandRecogniser(HandRecogniser):
|
||||
|
||||
return radius, centre
|
||||
|
||||
def __shift_pixels(self, image, shift_radius):
|
||||
image[:,:,0] = image[:,:,0] + shift_radius
|
||||
return np.where(image[:,:,0] > 179, image[:,:,0] - 179, image[:,:,0])
|
||||
|
||||
def get_gesture(self):
|
||||
"""
|
||||
Calculates the actual gesture, returning the number of fingers
|
||||
seen in the image.
|
||||
"""
|
||||
if not self.img:
|
||||
if self.img is None:
|
||||
return 0
|
||||
|
||||
self.img_hsv = cv2.cvtColor(self.img, cv2.COLOR_BGR2HSV)
|
||||
|
||||
# Need to shift red pixels so they can be 0-20 rather than 250-~20
|
||||
self.img_hsv = self.__shift_pixels(self.img_hsv, 30)
|
||||
|
||||
self.img_hsv = self.__denoise(self.img_hsv)
|
||||
self.__segment_image()
|
||||
|
||||
radius, centre = self.__calc_circle(self.mask)
|
||||
|
||||
Reference in New Issue
Block a user