2016-08-15 2 views
-1

참고 사항 초보자입니다. 나는 그림을 분석하고 이미지에서 발견 된 모든 얼굴 주위에 상자를 배치하는 스크립트를 만들었습니다. 그 부분은 효과가있는 것으로 "if faces = True"의 "faces"를 변경하는 것이 필요합니다. If 발견 된 얼굴 = 사실, 나는 그것이 무엇인지 알지 못한다. 얼굴은 아무것도하지 않는다.다른 사람이 opencv로 얼굴 검출기를 사용하는 경우

if faces = True: 
     cv2.imshow("(1) Pamela Found" ,image) 
    else: 
     cv2.imshow("(0) Pamela's Found" ,image) 

작동하지 않습니다

import cv2 
import sys 
import time 

imagePath = sys.argv[1] 
cascPath = sys.argv[2] 

faceCascade = cv2.CascadeClassifier(cascPath) 

image = cv2.imread(imagePath) 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

faces = faceCascade.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=5,minSize=(30, 30))#,flags = cv2.cv.CV_HAAR_IMAGE_SCALE) 

for (x, y, w, h) in faces: 
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) 

if faces = True: 
    cv2.imshow("(1) Pamela Found" ,image) 
else: 
    cv2.imshow("(0) Pamela's Found" ,image) 

cv2.waitKey(0)&0xFF 

코드는 이미이 것을 그냥 작동합니다. 도와 주시면 감사하겠습니다 - 고마워요!

편집 :

import cv2 
import sys 
import time 

imagePath = sys.argv[1] 
cascPath = sys.argv[2] 

faceCascade = cv2.CascadeClassifier(cascPath) 

image = cv2.imread(imagePath) 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

faces = faceCascade.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=5,minSize=(30, 30))#,flags = cv2.cv.CV_HAAR_IMAGE_SCALE) 

for (x, y, w, h) in faces: 
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) 

if faces == True: 
    cv2.imshow("(1) Pamela(s) Found" ,image) 
    cv2.waitKey(0)&0xFF 
else: 
    cv2.imshow("(0) Pamela(s) Found" ,image) 
    cv2.waitKey(0)&0xFF 

내가 이것을 실행 XML 파일과 얼굴없는 이미지, 작동, 그리고 말한다 "(0) 파멜라 : 지금은 같이하는 코드를 변경 (s) Found "가 필요하지만, XML 파일을 실행하고 창에 얼굴이 나타나지 않는 이미지는 팝업 문구가 아닌 if 문 아래의 waitkey와 관련이 있다고 생각합니다. 감사하겠습니다 - 고마워요! 조건 등

+0

의 중복 '이 될 수 있습니다 (x, y, w, h) :'얼굴 '은 [list] (https://docs.python.org/3/tutorial/datastructures.html#more-on-lists)라고 생각합니다. . 당신이 원했던 것은'if len (faces)> 0'과 같은 것입니다. – Hamms

답변

0

사용 faces : 얼굴이 검출 된 경우 동안

if faces: # python types can be coerced to boolean 
    cv2.imshow("(1) Pamela Found" ,image) 
else: 
    cv2.imshow("(0) Pamela's Found" ,image) 

빈 목록 (또는 용기)와, falsy 값을 갖는 반복 가능한 (즉 faces가 비어 있지 않은) faces하겠습니다 truthy가 값입니다.


P. if faces = True은 구문 오류를 발생시키고 if faces == True을 의도 한 경우이 또한로 감소하고 if faces으로 작성하는 것이 좋습니다.

+0

감사합니다. 이것은 많은 도움이되었지만, 또 다른 문제, 아이디어를 이끌어 냈습니다. – tcwissemann

0

in OpenCV의 설명서에 따르면, faceCascade.detectMultiScale은 개체 컬렉션을으로 반환합니다. 테스트하려면

콜렉션 (list, set, tuple, dict 등) 비 비어, 그냥 시도 :

if faces: 
    cv2.imshow("(1) Pamela Found", image) 
else: 
    cv2.imshow("(0) Pamela's Found", image) 

가에 따라 Best way to check if a list is empty

+0

제발, 위로 투표하십시오 ;-) –

관련 문제