Emgu CV是OpenCV图像处理库的跨平台.Net包装器。允许从.NET兼容语言(C#,VB,VC ++,IronPython等)调用OpenCV函数。
网上下一个示例程序,运行如下;
可以把人脸识别出来提取到右侧;我试了一下不是所有的情况都能识别;
大概看一下代码;
packages目录下包含emgucv的库;
代码中包含一个xml文件,是人脸识别的模板文件;
需要的dll;
代码;
using Emgu.CV;
using Emgu.CV.Structure;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CV
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog(); //显示选择文件对话框
openFileDialog1.Filter = "图片文件 (*.jpg)|*.jpg|All files (*.*)|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
var file = openFileDialog1.FileName; //显示文件路径
this.pictureBox1.ImageLocation = file;
PicSet(file);
}
}
private void Pic(Bitmap bitmap)
{
PictureBox pic = new PictureBox();
pic.Image = Image.FromHbitmap(bitmap.GetHbitmap());
pic.Size = new Size(103, 103);
pic.Name = DateTime.Now.Ticks.ToString();
pic.BackgroundImageLayout = ImageLayout.Stretch;
pic.SizeMode = PictureBoxSizeMode.StretchImage;
flowLayoutPanel1.Controls.Add(pic);
}
public void PicSet(string file)
{
var face = new CascadeClassifier("haarcascade_frontalface_alt.xml");
//加载要识别的图片
var img = new Image<Bgr, byte>(file);
var img2 = new Image<Gray, byte>(img.ToBitmap());
//把图片从彩色转灰度
CvInvoke.CvtColor(img, img2, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);
//亮度增强
CvInvoke.EqualizeHist(img2, img2);
//在这一步就已经识别出来了,返回的是人脸所在的位置和大小
var facesDetected = face.DetectMultiScale(img2, 1.1, 10, new Size(50, 50));
//循环把人脸部分切出来并保存
int count = 0;
var b = img.ToBitmap();
foreach (var item in facesDetected)
{
count++;
var bmpOut = new Bitmap(item.Width, item.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
var g = Graphics.FromImage(bmpOut);
g.DrawImage(b, new Rectangle(0, 0, item.Width, item.Height), new Rectangle(item.X, item.Y, item.Width, item.Height), GraphicsUnit.Pixel);
g.Dispose();
Pic(bmpOut);
bmpOut.Save($"{count}.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
bmpOut.Dispose();
}
if (facesDetected.Length < 1)
{
this.label1.Text = "识别结果:0";
}
else {
this.label1.Text = "识别结果:"+ facesDetected.Length;
}
//释放资源退出
b.Dispose();
img.Dispose();
img2.Dispose();
face.Dispose();
}
}
}
基本的人脸识别比较简单,库已经做了大多数事情;
包含相关命名空间,
加载人脸识别模板文件,
var face = new CascadeClassifier("haarcascade_frontalface_alt.xml");
再调用几个函数就可以了;
看一下xml的模板文件,这是库提供的;
里面是一些看上去是系数的东西;这是以一定数量的人脸数据经人工智能训练得来的;我也不知道是啥;大概是嘴巴的宽度、眼睛的大小、嘴巴到鼻子的距离、鼻子到眼睛的距离一类的东西;
它的官网;文章来源:https://www.toymoban.com/news/detail-649733.html
https://www.emgu.com/wiki/index.php/Main_Page
https://www.emgu.com/wiki/index.php/Emgu_TF_License文章来源地址https://www.toymoban.com/news/detail-649733.html
到了这里,关于初步了解C#版图像处理库emgucv的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!