작성
·
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
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. 코드로만 봐서는 정상적으로 작동할 것 같은데 어떤 에러가 난다는 건가요? 에러를 자세히 알려주세요.
감사합니다.