Csharp/C#教程:C# – 检测面部和裁剪图像分享


C# – 检测面部和裁剪图像

我正在用C#写一个HttpHandler ,它提供了resize的图像,等等等等……没有麻烦,我们有数以百万计的处理程序用作参考。

问题是我的用户照片采用“传统”尺寸,如4:3和16:9。 但是这个处理程序需要以照片ID大小(4cm×3cm)提供照片,显然需要在用户脸部周围进行裁剪 。 面部位置变化很大(并不总是在图片中心)。

那么,我可以使用什么样的算法来检测面部中心然后围绕这一点裁剪图像?

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

注意为了运行此示例:

 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 nextFrame = cap.QueryFrame()) { if (nextFrame != null) { // there's only one channel (greyscale), hence the zero index //var faces = nextFrame.DetectHaarCascade(haar)[0]; Image grayframe = nextFrame.Convert(); 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"); } } } 

以下是我写的样本https://www.overroot.com/blog/wp-content/uploads/2011/03/FaceRecognition.zip

在CodeProject上有一个例子 ,看起来这将是一个非常好的起点。

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

如果您正在寻找裁剪图像,可以使用名为Face API的Microsoft认知服务来分隔您照片上所有人的面部,它会为您提供一个JSON,其中包含返回Rectangle结构的元素,然后您可以根据需要裁剪和调整图像大小。

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

上述就是C#学习教程:C# – 检测面部和裁剪图像分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1007281.html

(0)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐