我目前正在 Python 中开发一个函数,旨在使用 OpenCV 级联检测图像中的嘴巴。这是代码片段:
def detect_mouth(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, minNeighbors=7)
for (x, y, w, h) in faces:
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
mouth = mouth_cascade.detectMultiScale(roi_gray, minNeighbors=10)
if len(mouth) > 1:
mouth = mouth_cascade.detectMultiScale(roi_gray, minNeighbors=100)
elif len(mouth) < 1:
mouth = mouth_cascade.detectMultiScale(roi_gray, minNeighbors=7)
for (mx, my, mw, mh) in mouth:
cv2.rectangle(roi_color, (mx, my), (mx+mw, my+mh), (255, 0, 255), 2)
return img
不同种族的嘴巴检测似乎并不一致。当使用白人女性的图像进行测试时,嘴巴被正确检测到,如图
所示但是,在使用黑人女性图像进行测试时,在某些情况下未检测到嘴巴,如图
所示没有检测到嘴,而是显示为眼睛! 有趣的是,在其他一些情况下,像这样的情况下,嘴部也被成功检测到:
我尝试过调整minNeighbors参数,但并没有改善结果。这与特定肤色有关,还是设置中还有其他需要调整的地方?