2017-11-19 12 views
0

OpenCV를 처음 사용했습니다. opencv를 사용하여 눈을 감지하고 추가 분류를 위해 폴더에 저장해야합니다. 나는 같은 스크립트를 다음과 같이 썼다 :Python OpenCV - 눈 감지 및 저장

import numpy as np 
import cv2 

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 

eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') 

cap = cv2.VideoCapture(0) 
while True: 
    ret, img = cap.read() 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.3, 5) 
    count=1 
    for (x,y,w,h) in faces: 
     cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) 
     roi_gray = gray[y:y+h, x:x+w] 
     roi_color = img[y:y+h, x:x+w] 

     eyes = eye_cascade.detectMultiScale(roi_gray) 
     for (ex,ey,ew,eh) in eyes: 
      crop_img = roi_color[ey: ey + eh, ex: ex + ew] 
      cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) 
      s="{0}.jpg" 
      s1='/home/kushal/Pictures/Webcam/'+s.format(count) 
      count=count+1 
      cv2.imwrite(s1,crop_img) 
cv2.imshow('img',img) 
k = cv2.waitKey(30) & 0xff 
if k == 27: 
    break 

cap.release() 
cv2.destroyAllWindows() 

가능한 많은 눈 이미지를 저장하고 싶다. 그러나 3-4 개의 눈 이미지 만 저장됩니다. 초당 1 프레임 또는 1 이미지를 얻을 수 있습니까? 이 코드에서 수정해야 할 사항은 무엇입니까?

답변

1

외부로 count=1을 이동하십시오.

count = 1 
while True: 
    pass 
    #your code 

그리고 들여 쓰기 cv2.imshow은 정확하지 않습니다.

import numpy as np 
import cv2 

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') 

cap = cv2.VideoCapture(0) 
count=1 

while True: 
    ret, img = cap.read() 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.2, 5) 
    for (x,y,w,h) in faces: 
     cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) 
     roi_gray = gray[y:y+h, x:x+w] 
     roi_color = img[y:y+h, x:x+w] 

     eyes = eye_cascade.detectMultiScale(roi_gray) 
     for (ex,ey,ew,eh) in eyes: 
      print(count) 
      crop_img = roi_color[ey: ey + eh, ex: ex + ew] 
      cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) 
      s1='tmp/{}.jpg'.format(count) 
      count=count+1 
      cv2.imwrite(s1,crop_img) 

    cv2.imshow('img',img) 
    k = cv2.waitKey(30) & 0xff 
    if k == 27: 
     break 

cap.release() 
cv2.destroyAllWindows() 
+0

이것은 완료되었습니다. 감사합니다 :) – slimshadyrocks

0

이전 대답과 관련하여 하얼 - 캐스케이드 슬라이딩 윈도우의 비율 조정 요인을 실험 해 볼 수도 있습니다.

이번에는 갤러리에 가양 성이 있다고 가정 할 수 있습니다. 즉, haar-cascade가 눈으로 감지 한 눈이 아닌 이미지입니다. 그래서 더 정확한 결과를 얻을 수 있기 때문에 D-lib를 사용하는 것이 좋습니다. d-lib 라이브러리에서 제공하는 68 개의 얼굴 랜드 마크 포인트에서 관심 영역을 잘라낼 수 있습니다. reference의 경우

+0

오케이. 나는 그것을 시도 할 것이다. 제안 주셔서 감사합니다 :) – slimshadyrocks