인프런 커뮤니티 질문&답변

choi님의 프로필 이미지
choi

작성한 질문수

[OpenCV] 파이썬 딥러닝 영상처리 프로젝트 - 손흥민을 찾아라!

load the cascade 질문

작성

·

433

0

1. 아래 코드에서 cv2.samples.findFile 이 이해가 가질않습니다.자세한 설명 부탁드립니다.


face_cascade = cv2.CascadeClassifier()

if not face_cascade.load(cv2.samples.findFile('haarcascade_frontalface_alt.xml')): 

2. 그리고 cv2.CascadeClassifier()를 face_cascade 변수에 넣었으니 그냥 face_cascade대신에  if not cv2.CascadeClassifier().load(cv2.samples.findFile('haarcascade_frontalface_alt.xml')):   라고 적어도 돼야하는데 에러가나네요. 왜그런건가요?

답변 2

0

choi님의 프로필 이미지
choi
질문자

import cv2

import numpy as np

def detectAndDisplay(frame):

    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    frame_gray = cv2.equalizeHist(frame_gray)

    #-- Detect faces

    faces = cv2.CascadeClassifier().detectMultiScale(frame_gray)

    for (x,y,w,h) in faces:

        center = (x + w//2, y + h//2)

        frame = cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 4)

        faceROI = frame_gray[y:y+h,x:x+w]

        #-- In each face, detect eyes

        eyes = eyes_cascade.detectMultiScale(faceROI)

        for (x2,y2,w2,h2) in eyes:

            eye_center = (x + x2 + w2//2, y + y2 + h2//2)

            radius = int(round((w2 + h2)*0.25))

            frame = cv2.circle(frame, eye_center, radius, (255, 0, 0 ), 4)

        cv2.imshow('Capture - Face detection', frame)

    

print("OpenCV version:")

print(cv2.__version__)

img = cv2.imread("marathon_01.jpg")

print("width: {} pixels".format(img.shape[1]))

print("height: {} pixels".format(img.shape[0]))

print("channels: {}".format(img.shape[2]))

(height, width) = img.shape[:2]

cv2.imshow("Original Image", img)

face_cascade_name = 'haarcascade_frontalface_alt.xml'

eyes_cascade_name = 'haarcascade_eye_tree_eyeglasses.xml'

eyes_cascade = cv2.CascadeClassifier()

#-- 1. Load the cascades

if not cv2.CascadeClassifier().load(cv2.samples.findFile(face_cascade_name)):

    print('--(!)Error loading face cascade')

    exit(0)

if not eyes_cascade.load(cv2.samples.findFile(eyes_cascade_name)):

    print('--(!)Error loading eyes cascade')

    exit(0)

detectAndDisplay(img)

cv2.waitKey(0)

cv2.destroyAllWindows()

------------------------------------------------------------------------------------------------

face_cascade = cv2.CascadeClassifier()를   코드에서 없애고   if not face_cascade.load(cv2.samples.findFile(face_cascade_name)): 에서

face_cascade 대신에 cv2.CascadeClassifier()를 넣어서 if not cv2.CascadeClassifier().load9cv2.sampled.findFile(face_cascade_name)): 으로 적으니 error: OpenCV(4.2.0) /io/opencv/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'detectMultiScale' 와 같은 에러가 납니다.왜 에러가 나나요?

0

안녕하세요?

1. cv2.samples.findFile는 특정 파일 path를 찾아가기 위해 사용하는 모듈과 함수입니다. 'haarcascade_frontalface_alt.xml'파일의 경로를 가져오는 것이지요.

2. 코드로만 봐서는 정상적으로 작동할 것 같은데 어떤 에러가 난다는 건가요? 에러를 자세히 알려주세요.

감사합니다. 

choi님의 프로필 이미지
choi

작성한 질문수

질문하기