OpenCV-Python 版本 3.4.1
我正在尝试通过相机检测多个物体。对象是脸、眼睛、勺子、笔。Spoon 和 Pen 是特别的,即它应该只检测我训练过的 Pen 和 Spoon。但它会检测所有类型的面部和眼睛,因为我使用 OpenCV-Python 附带的“.xml”文件进行面部和眼睛检测。
我的问题是关于代码的。我的代码下面有一行代码是detectMultiScale(gray, 1.3, 10)。现在,我使用文档,仍然无法清楚地理解括号的最后两个参数。
我的代码:
# with camera feed
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
spoon_cascade = cv2.CascadeClassifier('SpoonCascade.xml')
pen_cascade = cv2.CascadeClassifier('PenCascade.xml')
cap = cv2.VideoCapture('link')
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
spoons = spoon_cascade.detectMultiScale(gray, 1.3, 10)
pens = pen_cascade.detectMultiScale(gray, 1.3, 10)
for (x, y, w, h) in spoons:
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'Spoon', (x-w, y-h), font, 0.5, (0, 255, 255), 2,
cv2.LINE_AA)
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
for (x, y, w, h) in pens:
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'Pen', (x-w, y-h), font, 0.5, (0, 255, 255), 2,
cv2.LINE_AA)
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
for (x, y, w, h) in faces:
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'Face', (x + w, y + h), font, 0.5, (0, 255, 255), 2,
cv2.LINE_AA)
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
roi_color = img[y:y + h, x:x + w]
roi_gray = gray[y:y + h, x:x + w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 0,
255), 2)
cv2.imshow('Voila', img)
cv2.imwrite('KuchhToDetected.jpg', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我的问题:
这只是调整最后两个参数的试错问题,还是可以知道如何根据图像更改它们?
在我看来,这两个非常重要,并且使代码非常敏感,因为它会影响误报。如何正确设置它们以减少误报?
在对象检测的情况下,它是非常重要的参数,所以如果我们一劳永逸地得到答案,这对所有人都是有益的。
谢谢你。