定位思路
1.定位脸部
2. 将脸部分为左右两张图像
3. 分别在左右脸部图像中定位眼睛
4. 对眼睛进行模糊处理,寻找瞳孔
5. 得到瞳孔轮廓重心
一、脸部定位
public List<Image<Bgr, byte>> GetFaceImgList(Image<Bgr, byte> img)
{
CascadeClassifier faceClassifier = new CascadeClassifier("haarcascade_frontalface_default.xml");
List<Image<Bgr, byte>> facelist = new List<Image<Bgr, byte>>();
Rectangle[] faces = faceClassifier.DetectMultiScale(img, 1.3, 3, new Size(40, 40));
try
{
foreach (Rectangle face in faces)
{
CvInvoke.Rectangle(img, face, new Bgr(Color.Red).MCvScalar, 2);
CvInvoke.cvSetImageROI(img, face);
Image<Bgr, byte> roi = new Image<Bgr, byte>(face.Size);
CvInvoke.cvCopy(img, roi, IntPtr.Zero);
facelist.Add(roi);
}
if (facelist.Count != 0)
return facelist;
else
{
facelist.Add(img);
return facelist;
}
}
catch (Exception ex)
{
MessageBox.Show("脸部检测失败,详细原因
" + ex.Message + "
" + ex.StackTrace);
facelist.Add(img);
return facelist;
}
}
二、眼睛定位
同脸部定位一样,用眼睛检测文件。
三、模糊处理
对眼部图像进行模糊处理,可以更好的得到瞳孔的轮廓
四、获取轮廓的重心
对瞳孔图像提取轮廓,计算轮廓的重心即眼睛的重心。