Я изменял код OpenCV 3.0 Python, чтобы распознавать жесты рук, рисуя контур вокруг пальцев, используя выпуклый корпус для распознавания точек на кончиках пальцев.
В любом случае, код работает, но он работает только с темным (черноватым) фоном. Код использует порог для бинаризации изображения, поэтому самой яркой формой будет рука (поэтому фон черный, а форма руки белая).
Как я могу изменить порог, чтобы бинаризировать изображение, чтобы просто выбрать цвет кожи, а не самые яркие цвета?
Например, после завершения бинаризации черная часть изображения видеопотока будет иметь все цвета, кроме телесных, а белая часть бинарного изображения будет телесного цвета.
Вот код:
def readCamera(self):
_, self.original = self.cap.read()
self.original = cv2.flip(self.original, 1)
def threshold(self):
hsv = cv2.cvtColor(self.original, cv2.COLOR_BGR2HSV)
value = (31, 31)
blurred = cv2.GaussianBlur(hsv, value, 0)
_, self.thresholded = cv2.threshold(hsv[:,:,0], 0, 255,
cv2.THRESH_BINARY+cv2.THRESH_OTSU)
def extractContours(self):
_, self.contours, _ = cv2.findContours(self.thresholded.copy(),
cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
inRange
. Если вы можете определить цветовой диапазон для кожи (лучше в пространстве HSV), он будет работать намного лучше, чем пороги otsu. - person Miki   schedule 03.03.2016