質問: cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1)) cnt += 1 if len(facerect) > 0: for (x,y,w,h) in facerect: cv2.rectangle(frame, (x,y),(x+w,y+h), color, 5) print 'a' cv2.imshow('fram', frame) cv2.waitKey(20) cap.release() cv2.dstroyAllWindows() ```
回答: 少なくとも以下の要領で静止画像は正しく認識できました。 カスケード分類器(.xml)と画像(lena.jpg)はOnenCV同梱のファイルで、カレントディレクトリにコピーしています。 環境は`Win10+Anaconda(python2.7)+Jupyter Notebook`です。 * カスケード分類器は読み込めているか? * グレイスケール化はできているか? * `facerect`は正しく取得できているか? などを確認してはいかがでしょうか? ``` import cv2 # opencv import matplotlib.pyplot as plt %matplotlib inline # カスケード分類器を読込 cascade_path = "haarcascade_frontalface_alt.xml" cascade = cv2.CascadeClassifier(cascade_path) print( "cascade:" + repr(cascade)) # 対象の画像を読込&解析 imgFile = cv2.imread('lena.jpg') grayImg = cv2.cvtColor(imgFile, cv2.COLOR_BGR2GRAY) facerect = cascade.detectMultiScale(grayImg, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1)) print( "facerect:" + repr(facerect)) # 結果(枠)の描画 imgShow = cv2.cvtColor(imgFile, cv2.COLOR_BGR2RGB) # opencv(B,G,R) -> matplotlib(R,G,B) for (x,y,w,h) in facerect: cv2.rectangle(imgShow, (x,y),(x+w,y+h), (0,0,255), 5) plt.imshow(imgShow) ``` 結果 !結果