Открыть резюме Распознавание рук: сделать тыльную проекцию ладони более точной?Python

Программы на Python
Ответить
Anonymous
 Открыть резюме Распознавание рук: сделать тыльную проекцию ладони более точной?

Сообщение Anonymous »

Я использую обратную проекцию гистограммы, чтобы обнаружить свою ладонь в видеопотоке с веб-камеры.
Я прекрасно получаю контуры ладони. Проблема в том, что мое лицо и другие объекты типа «цвета кожи» также обнаруживаются.
Как мне сделать так, чтобы моя гистограмма обнаруживала только мою ладонь и ничего больше (повышение точности гистограммы)?

Я использую область изображения моей ладони для расчета гистограммы перед запуском программы.
Изображение


Обратите внимание на обнаружение двери и лица на заднем плане:

Изображение


cap = cv2.VideoCapture(0)
while True:
_, frame = cap.read()
frame = cv2.flip(frame, 1)
cv2.putText(frame, "Place region of the {} inside the box".format(objectName), (30,50), cv2.FONT_HERSHEY_SIMPLEX, 0.85, (255,0,105), 1, cv2.LINE_AA)
cv2.rectangle(frame, (100, 100), (150, 150), (255, 0 , 255), 2)
cv2.imshow("Video Feed", frame)
key = cv2.waitKey(10)
if key == 108:
objectColor = frame[100:150, 100:150]
break
if key == 27:
cv2.destroyAllWindows()
cap.release()
break
hsvObjectColor = cv2.cvtColor(objectColor, cv2.COLOR_BGR2HSV)
objectHist = cv2.calcHist([hsvObjectColor], [0,1], None, [12,15], [0,180,0,256])
cv2.normalize(objectHist, objectHist, 0,255,cv2.NORM_MINMAX)


Следующий сегмент кода определяет ладонь с помощью приведенной выше гистограммы.

hsvFrame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

objectSegment = cv2.calcBackProject([hsvFrame], [0,1], objectHist, [0,180,0,256], 1)
disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
cv2.filter2D(objectSegment, -1, disc, objectSegment)
_, threshObjectSegment = cv2.threshold(objectSegment,70,255,cv2.THRESH_BINARY)

threshObjectSegment = cv2.merge((threshObjectSegment,threshObjectSegment,threshObjectSegment))
locatedObject = cv2.bitwise_and(frame, threshObjectSegment)

locatedObjectGray = cv2.cvtColor(locatedObject, cv2.COLOR_BGR2GRAY)
_, locatedObjectThresh = cv2.threshold(locatedObjectGray, 70, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
locatedObject = cv2.medianBlur(locatedObjectThresh, 5)


Подробнее здесь: https://stackoverflow.com/questions/418 ... e-accurate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»