前言

本文主要vb.net教程介绍c#教程如何使用OpenCV剪python基础教程切图java基础教程形中的sql教程人物头像。

准备工作

首先创建一个Wpf项目——OpenCV_Face_Wpf,这里版本使用Framework4.7.2。

然后使用Nuget搜索【Emgu.CV】,如下图。

这里的Emgu.CV选择4.3.0.3890版本,然后安装Emgu.CV和Emgu.CV.runtime.windows。

然后下载所需文件haarcascade_frontalface_default.xml。

可以去OpenCV的开源代码中下载,下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades。

然后将文件加入进项目,并修改属性,让xml文件输出到启动目录,如下图。

使用OPenCV剪切人脸部分

现在,我们进入项目,进行OPenCV的调用。

首先引入命名空间,如下:

1

2

3

4

5

using Emgu.CV;

using Emgu.CV.CvEnum;

using Emgu.CV.Structure;

using System.Drawing;

using System.Windows.Forms;

然后编写人脸剪切函数——CutFace。

函数里,我们先使用CascadeClassifier类读取haarcascade_frontalface_default.xml文件,建立人脸检测的对象。

再使用Mat类来导入图片(灰度模式)。

然后再使用人脸检测的对象的方法——DetectMultiScale进行人脸数量识别。

最后通过Bitmap类把识别出来的人脸进行剪切保存。

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

public void CutFace(string filename)

{

    //CvInvoke.UseOpenCL = CvInvoke.HaveOpenCLCompatibleGpuDevice;//使用GPU运算

    var face = new CascadeClassifier("haarcascade_frontalface_default.xml");

    var mat = new Mat(filename, ImreadModes.Grayscale);//灰度导入图片

    int minNeighbors = 7;//最小矩阵组,默认3

    var size = new System.Drawing.Size(10, 10);//最小头像大小

    var facesDetected = face.DetectMultiScale(mat, 1.1, minNeighbors, size);

    //循环把人脸部分切割出来并保存

    int index = 0;

    var bitmap = Bitmap.FromFile(filename);

    foreach (var item in facesDetected)

    {

        index++;

        var bmpOut = new Bitmap(item.Width, item.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

        var g = Graphics.FromImage(bmpOut);

        g.DrawImage(bitmap, new System.Drawing.Rectangle(0, 0, item.Width, item.Height),

            new System.Drawing.Rectangle(item.X, item.Y, item.Width, item.Height), GraphicsUnit.Pixel);

        g.Dispose();

        bmpOut.Save($"Face_{index}.png", System.Drawing.Imaging.ImageFormat.Png);

        bmpOut.Dispose();

    }

    bitmap.Dispose();

    mat.Dispose();

    face.Dispose();

}

然后编写一个打开文件的函数,在成功打开文件后调用CutFace。

1

2

3

4

5

6

7

8

9

public void SelectImg()

{

    System.Windows.Forms.OpenFileDialog frm = new System.Windows.Forms.OpenFileDialog();

    frm.Filter = "(*.jpg,*.png,*.jpeg,*.bmp)|*.jgp;*.png;*.jpeg;*.bmp|All files(*.*)|*.*";

    if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)

    {

        CutFace(frm.FileName);

    }

}

现在我们启动项目,如下图:

运行结果

点击界面中的打开图片,选中带人脸的图片进行测试。

代码中默认把剪切的图片保存到Debug文件夹下,我们打开Debug文件夹,如下图:

因为我选中的图片只有一个人脸,所以得到一个剪切图片——Face_1.png。

原图与剪切后的图片对比如下:

现在,我们换一个人脸多的图片,再测试一下。测试图片如下。

运行后结果如下:

----------------------------------------------------------------------------------------------------

到此C#使用OpenCV剪切图形中的人物头像就已经介绍完了。

代码已经传到Github上了,欢迎大家下载。

Github地址: https://github.com/kiba518/OpenCV_Face_Wpf

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

C#使用OpenCV剪切图片中的人物头像相关推荐

  1. C# 使用 OpenCV 剪切图片中的人物头像

    转自:kiba518 cnblogs.com/kiba/p/14428557.html 前言 本文主要介绍如何使用OpenCV剪切图形中的人物头像. 准备工作 首先创建一个Wpf项目--OpenCV_ ...

  2. Pytorch 使用GAN实现二次元人物头像生成 保姆级教程(数据集+实现代码+数学原理)

    Pytorch 使用DCGAN实现二次元人物头像生成(实现代码+公式推导) GAN介绍   算法主体   推导证明(之后将补全完整过程)   随机梯度下降训练D,G   DCGAN介绍及相关原理 Py ...

  3. zip直链生成网站_手把手教你如何用飞桨自动生成二次元人物头像

    [飞桨开发者说]李思佑,昆明理工大学信息与计算科学大四本科生:2018年和2019年两次获得全国大学生数学建模比赛国家二等奖:2020年美国数学建模比赛获M奖.指导老师:昆明理工大学理学院朱志宁想画出 ...

  4. 手把手教你如何用飞桨自动生成二次元人物头像

    [飞桨开发者说]李思佑,昆明理工大学信息与计算科学大四本科生:2018年和2019年两次获得全国大学生数学建模比赛国家二等奖:2020年美国数学建模比赛获M奖. 指导老师:昆明理工大学理学院朱志宁 想 ...

  5. 图片中的人物怎么抠出来?分享几种好用抠图方法

    怎么把图片中的人物给抠出来呢?对于广告.海报等宣传材料,抠出图片中的人物可以使宣传信息更加突出.通过将人物抠出并放置在适当位置,可以吸引更多的注意力.还有很多小伙伴也喜欢把自己的照片人像抠出来,进行换 ...

  6. Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示

    Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示 1. 效果图 2. 源码 写这篇博客源于博友的提问,期望把下图中的多个茄子种子按从左到右的顺序提取出来: 1. 效果图 ...

  7. 漫画人物头像总是画不好?快看看这些注意点你有没有中招!

    有很多同学非常喜欢画漫画人物,而且我们也经常在某小说插图中或者某站看到很多的漫画人物形象,而且漫画大多是以一种比较夸张的方式呈现的,比如大大的眼睛,夸张的发型等.也有不少的同学在刚学习漫画人物头像的时 ...

  8. python opencv 剪切图片

    因为在 OpenCV2 里面,所有的东西都是 numpy array 即 np.ndarray1,所以使用 opencv 剪切图像主要原理是用 ndarray 的切片.一张图片基本上都是三维数组:行, ...

  9. 用Paddle自动生成二次元人物头像

    用Paddle自动生成二次元人物头像 想画出独一无二的动漫头像吗?不会画也没关系!只需要输入一些随机数让卷积神经网络为你画出精致并且独一无二的动漫头像! 同时本项目也是绝佳的学习DCGAN的例子,通过 ...

最新文章

  1. 实现分布式服务注册及简易的netty聊天
  2. 阿里云服务器ECS配置LNMP
  3. 2017-2018-2 20179202《网络攻防技术》第一周作业
  4. Swing开发界面时的一个bug复盘
  5. 3D坦克大战游戏源码
  6. homelede软路由设置方法_斐讯无线路由器怎么设置 斐讯无线路由器设置方法【详解】...
  7. PostgreSQL的 initdb 源代码分析之二十一
  8. ShardingSphere JDBC 分库分表 读写分离 数据加密
  9. jq cookie的使用
  10. mysql groupby php_php – MySQL,GroupBy OrderBy
  11. python教程我要自学网-我要自学网--json 数据解析-python。
  12. 远程连接Linux密码特殊字符,[转载]linux shell 命令_特殊字符
  13. 猎豹网校C++ Primer学习笔记
  14. (20200108)matlab弹出对话框形式打开和读取指定文件,不用提前输入文件名——uigetfile
  15. 【评测】NHEK细胞(正常成人表皮角质形成层细胞)
  16. 计算机出现假桌面怎么解决办法,W10电脑下“AppHangXProcB1”导致桌面频繁假死如何解决?...
  17. 『 云原生·Docker』Docker镜像分层与Docker镜像操作(二)
  18. 斐讯 r1 起死回生
  19. 两化融合主要在哪些方面
  20. 设计模式讲解与代码实践(二十三)——模板方法

热门文章

  1. linux创建用户与设置用户密码
  2. ios15搜索框自带搜索图标导致冲突的解决
  3. Raspberry Pi NOOBS setup
  4. 封装Ajax请求,callback函数参数分析
  5. 我的英雄之路--转自HERO2008会刊
  6. pandas中shift(1)是什么用法?
  7. 【Unity】【VR开发】为什么认为Quest和Unity组合是目前消费级VR开发的最佳组合
  8. 小程序 + Vant
  9. python 使用公司邮箱发邮件_python 通过邮件发送附件之企业QQ邮箱
  10. 使用VMware虚拟机安装苹果MacOS操作系统