2016-08-15 12 views
-1

注意私は初心者です。私は画像を分析し、画像内に見つかった任意の顔の周りにボックスを配置するスクリプトを作った。その部分は機能する。何かするために必要なのは、if faces = Trueのif見つかった顔は真実ですが、私はそれが何であるか分かりませんが、顔は何もしません。もしopencvの顔検出器であれば

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 

コードがすでにあることちょうどそれを動作します:

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(s) Found" ,image) 
    cv2.waitKey(0)&0xFF 
else: 
    cv2.imshow("(0) Pamela(s) Found" ,image) 
    cv2.waitKey(0)&0xFF 

私はこれを実行し、XMLファイルと顔のない画像、それが動作する、と言う、「(0)パメラ:今、私はこのように見えるようにコードを変更しました私がこれを実行すると、XMLファイル、およびウィンドウがポップアップしない顔を持つイメージが表示されます。これは、if文の下にあるwaitkeyと関係していると思います。ありがとう - ありがとう!

+0

の重複 '性( x、y、w、h): '' faces'は[list](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists)であると推測しています。 。おそらくあなたが望むのは '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意志真実値があります。


P.S. if faces = Trueは構文エラーを発生させ、if faces == Trueを指定した場合は、にもなり、if facesと表示されます。

+0

ありがとう、これは束を助けましたが、それは別の問題、任意のアイデアにつながる? – tcwissemann

0

ドキュメントによると、in OpenCV faceCascade.detectMultiScaleは、オブジェクトのコレクションを返します。テストへ

コレクション(listsettupledict、など)非空である、ちょうど試してみてください。

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

お願い、アップ投票;-) –

関連する問題