使用OpenCV和Python的人脸检测准确率
我最近开始学习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特征分类器,效果要好一些,然后把结果结合起来。
实际上,如果两个分类器找到的结果相似,你可以把它们结合起来,并给这个结合后的结果一个更高的分数。
为了进一步提高检测效果,你还可以使用分类器来检测眼睛、鼻子和嘴巴。如果在检测到的脸部中找到这些特征,你也可以给这些脸部加更多的分值。
在整个过程中,你可以得到一个检测到的脸部列表,并附上分数。分数越高,说明检测结果越可能是正确的。
希望这些信息对你有帮助。