2017-01-26 5 views
1

웹캠 비디오 피드에서 내 손바닥을 감지하기 위해 히스토그램 역 투영을 사용하고 있습니다. 나는 손바닥의 윤곽을 완벽하게 얻는다. 문제는 내 얼굴과 다른 "피부색"과 같은 물체도 감지된다는 것입니다. 어떻게 히스토그램을 내 손바닥만으로 감지 할 수 있습니까? (히스토그램 정확도 향상)?오픈 CV 손 인식 - 손바닥의 뒤 프로젝션을보다 정확하게 만드시겠습니까?

나는 프로그램을 실행하기 전에 내 손바닥 이미지의 영역을 사용하여 히스토그램을 계산합니다. 도어 얼굴 백그라운드 검출하기 enter image description here

주의 :

Picture of the video feed: notice the door and face getting detected in the background

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) 

답변

0

색상 막대 그래프를 사용하고 있기 때문에 다른 유사한 색상 물체가 분할되는 것을 방지하기가 매우 어렵습니다. 따라서 일단 이미지 분할이 완료되고 손과 다른 것들이 분할되면, 연결된 구성 요소를 사용하여 손 영역을 분리 할 수 ​​있습니다 (손 모양의 특징은 노이즈 피쳐와 다를 것임).

탐색 할 수있는 또 다른 사항은 임시 슈퍼 픽셀 매칭입니다. 첫 번째 프레임에서 손의 정확한 경계를 찾을 수있는 경우 히스토그램을 사용하여 연속 프레임에서 세그먼트를 분할 한 다음 수퍼 픽셀을 일시적으로 일치시켜 손 영역을 찾습니다. , 당신의 대답은 더 도움이 될 것입니다

0

당신은 얼굴을 감지하는 Haarcascade를 사용하고 단지 마스크를 넣어 당신이 (예를 들어, 좋은 마스크를 예시) 저에 대한 자세한 정보를주는 경우에 그것을

+0

을 제거 할 수 있습니다 ... –

+0

Haar Cascades를 사용하는 방법에 대한 standex의 자습서가 있습니다 : (https://www.youtube.com/watch?v=88HdqNDQsEk) – BasuruK