需要进行哪些更改才能使此代码检测多个人脸而不是仅一个人脸
Posted
技术标签:
【中文标题】需要进行哪些更改才能使此代码检测多个人脸而不是仅一个人脸【英文标题】:what change is necessary to make this code detect multiple faces rather than only one 【发布时间】:2018-08-11 12:36:27 【问题描述】:我是 openCV 和 dlib 模块的新手。我试图让这段代码检测多张脸,但只检测到第一张脸。
import numpy as np
import argparse
import imutils
import dlib
import cv2
from matplotlib import pyplot as plt
def rect_to_bb(rect):
x = rect.left()
y = rect.top()
w = rect.right() - x
h = rect.bottom() - y
return (x, y, w, h)
image = cv2.imread("image.jpg")
image = imutils.resize(image, width=500)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
detector = dlib.get_frontal_face_detector()
rects = detector(image, 1)
fname = "image.jpg".split('/')[-1]
name, ext = fname.split('.')
new_ext="png"
for (i, rect) in enumerate(rects):
(x, y, w, h) = rect_to_bb(rect)
fname = '_.'.format(name, i, new_ext)
clone = image.copy()
cv2.rectangle(clone, (x, y), (x + w , y + h), (0, 255, 0), 1)
startX = x
startY = y - 15 if y - 15 > 15 else y + 15
cv2.putText(clone, str(i), (startX, startY),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
roi = image[y:y + h, x:x + w]
cv2.imshow("Seprate Faces", roi)
cv2.imwrite(fname, roi)
cv2.imshow("Detected Faces", clone)
cv2.waitKey(0)
感谢您的回复! !谢谢
【问题讨论】:
您是否单独获取了每张脸,但又希望将所有脸都放在一张图像中?将 clone = image.copy() 移出循环(之前)并将 imshow 和 waitKey 移出循环(之后)。 @Micka,它有点工作。它现在检测到两张脸,但无法保存两张脸。它仍然只保存一张脸 伙计,谢谢。它保存了两张脸,但在跑步时只显示一张脸,但它有所帮助。谢谢大佬 【参考方案1】:我认为您想将灰度提交给检测器:
rects = detector(gray, 1)
【讨论】:
这没有帮助以上是关于需要进行哪些更改才能使此代码检测多个人脸而不是仅一个人脸的主要内容,如果未能解决你的问题,请参考以下文章
如何更改此 C++ (OpenCV) 代码以获取图像而不是视频?