初步了解C#版图像处理库emgucv
Posted bcbobo21cn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初步了解C#版图像处理库emgucv相关的知识,希望对你有一定的参考价值。
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.emgu.com/wiki/index.php/Main_Page
https://www.emgu.com/wiki/index.php/Emgu_TF_License
以上是关于初步了解C#版图像处理库emgucv的主要内容,如果未能解决你的问题,请参考以下文章