使用OpenCV和Python的人脸检测准确率

2 投票
1 回答
5735 浏览
提问于 2025-04-17 19:32

我最近开始学习opencv,并写了一个程序,用Python来检测图像中的人脸,并把所有检测到的人脸保存为单独的图片。这个程序在一些图片上运行得很好,但在很多图片上却无法检测到所有的人脸。

就连这张简单的图片(https://i.stack.imgur.com/g65FV.jpg)也检测失败。它只检测到了右边的人脸,却没有检测到左边的人脸。

请问有什么办法可以提高检测的准确性吗?

import cv2.cv as cv
import string
im = cv.LoadImageM("D:\Test\Dia.jpg")
storage = cv.CreateMemStorage()
haar=cv.Load("C:\opencv\data\haarcascades\haarcascade_frontalface_default.xml")
detected = cv.HaarDetectObjects(im, haar, storage, 1.1, 2,cv.CV_HAAR_DO_CANNY_PRUNING,(10,10))
i = 0
if detected:
    for face in detected:
        i = i + 1
        xx = face[0][0]
        yy = face[0][1]
        width = face[0][2]
        height = face[0][3]

        pankaj12 = (width,height)
        cvIm = cv.LoadImage("D:\Test\Dia.jpg")

        cropped = cv.CreateImage(pankaj12,cvIm.depth, cvIm.nChannels)
        src_region = cv.GetSubRect(cvIm, face[0])
        cv.Copy(src_region, cropped)
        cv.SaveImage("D:\Test\Pankaj"+str(i)+".jpg",cropped)

input("Press Enter to continue...")

1 个回答

1

我发现通过多次运行算法,使用OpenCV提供的不同haar特征分类器,效果要好一些,然后把结果结合起来。

实际上,如果两个分类器找到的结果相似,你可以把它们结合起来,并给这个结合后的结果一个更高的分数。

为了进一步提高检测效果,你还可以使用分类器来检测眼睛、鼻子和嘴巴。如果在检测到的脸部中找到这些特征,你也可以给这些脸部加更多的分值。

在整个过程中,你可以得到一个检测到的脸部列表,并附上分数。分数越高,说明检测结果越可能是正确的。

希望这些信息对你有帮助。

撰写回答