C#-检测人脸和裁剪图像
c#
image-processing
7
0

我正在用C#写一个HttpHandler ,它提供了已调整大小的图像,等等等等...没有问题,我们有数百万个处理程序可以用作参考。

问题是我有用“传统”尺寸拍摄的用户照片,如4:3和16:9。但是此处理程序将需要以照片ID大小(4厘米乘3厘米)提供图片,并且显然需要在用户面部周围裁剪 。脸部位置变化很大(并非总是在图片中心)。

那么,我可以使用哪种算法来检测人脸中心,然后在该点附近裁剪图像?

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

您可以在EmguCV(OpenCV的DotNet端口)中使用HaarCascade类http://www.emgu.com/wiki/index.php/Face_detection

为了运行此示例的注释:

  • 创建Windows窗体应用程序
  • 添加一个PictureBox和一个计时器(并启用它)-在x86系统上运行
  • 确保在执行代码的文件夹中有与OpenCV相关的dll(Emgu CV下载包含)。
  • 调整路径以查找Haarcascade xml(代码的最后一行)
using System;
using System.Windows.Forms;
using System.Drawing;
using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;

namespace opencvtut
{
    public partial class Form1 : Form
    {
                private Capture cap;
                private HaarCascade haar;

        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
                using (Image<Bgr, byte> nextFrame = cap.QueryFrame())
                {
                        if (nextFrame != null)
                        {
                                // there's only one channel (greyscale), hence the zero index
                                //var faces = nextFrame.DetectHaarCascade(haar)[0];
                                Image<Gray, byte> grayframe = nextFrame.Convert<Gray, byte>();
                                var faces =
                                        grayframe.DetectHaarCascade(
                                                haar, 1.4, 4,
                                                HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                                                new Size(nextFrame.Width/8, nextFrame.Height/8)
                                                )[0];

                                foreach (var face in faces)
                                {
                                        nextFrame.Draw(face.rect, new Bgr(0,double.MaxValue,0), 3);
                                }
                                pictureBox1.Image = nextFrame.ToBitmap();
                        }
                }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // passing 0 gets zeroth webcam
                        cap = new Capture(0);
            // adjust path to find your xml
                        haar = new HaarCascade(
                "..\\..\\..\\..\\lib\\haarcascade_frontalface_alt2.xml");
        }
    }
}

这是我写的示例http://www.overroot.com/blog/wp-content/uploads/2011/03/FaceRecognition.zip

收藏
评论

您可以在http://deteksiwajah.blogspot.com/上看到面部检测和裁剪软件的示例。它是开源的,并使用OpenCV库。

收藏
评论

如果要裁剪图像,则可以使用名为Face API的Microsoft认知服务,该服务对照片上所有人的脸部进行定界,它为您提供一个JSON,其中包含可返回矩形结构的元素,然后您就可以根据需要裁剪和调整图像大小。

在这里您可以看到有关它的更多信息: FaceAPI

收藏
评论

在CodeProject上有一个示例 ,看来这将是一个很好的起点。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号