C# 证件照替换底色与设置背景图---PaddleSegSharp

本文主要是介绍C# 证件照替换底色与设置背景图---PaddleSegSharp,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PaddleSegSharp 是一个基于百度飞桨PaddleSeg项目的人像分割模块而开发的.NET的工具类库。

PaddleSegSharp 中PaddleSeg.dll文件是基于开源项目最新发布版本PaddleSeg PaddleSeg的版本修改而成的C++动态库,基于opencv的x64编译而成的。

PaddleSeg是基于飞桨PaddlePaddle的端到端图像分割套件,内置45+模型算法及140+预训练模型,支持配置化驱动和API调用开发方式,打通数据标注、模型开发、训练、压缩、部署的全流程,提供语义分割、交互式分割、Matting、全景分割四大分割能力,助力算法在医疗、工业、遥感、娱乐等场景落地应用。

本项目只能在X64的CPU上编译和使用,只能在avx指令集上的CPU上使用,目前仅支持windows平台。

PaddleSegSharp 支持飞桨人像抠图的所有模型。PP-MattingV2-512、PP-Matting-512、PP-Matting-1024、PP-HumanMatting、MODNet-MobileNetV2。 默认使用MODNet-MobileNetV2模型。

1、新建winform项目

2、添加引用PaddleSegSharp ,使用NuGet 搜索添加PaddleSegSharp 

3、窗体上添加图片显示控件以及按钮

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PaddleSegSharp;namespace WindowsFormzhengjian
{public partial class Form1 : Form{#region 字段private string[] bmpFilters = new string[] { ".bmp", ".jpg", ".jpeg", ".tiff", ".tif", ".png" };private string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";private PaddleSegMattingEngine engine;MattingParameter parameter;string modelPath = null;string path = Environment.CurrentDirectory + @"\out\";/// <summary>/// 创建画布的画板背景/// </summary>Bitmap backgroundImage = null;#endregionpublic Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//初始化 引擎engine = new PaddleSegMattingEngine();//参数parameter = new MattingParameter();//parameter.outbgfile = true;//输出mask图//parameter.bgtransparent = true;//背景透明engine.Init(modelPath, parameter);if (!Directory.Exists(path)){Directory.CreateDirectory(path);}}/// <summary>/// 选择图片/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSelectPic_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = fileFilter;if (ofd.ShowDialog() == DialogResult.OK){//pictureBox1.Image = new Bitmap(ofd.FileName);using (FileStream ms = File.OpenRead(ofd.FileName)){//解决内存异常问题,以及this.pbx.BackgroundImage = System.Drawing.Image.FromStream(ms)导致的一般性gdi+ 问题using (Bitmap bt = new Bitmap(ms)){#region MyRegion//backgroundImage = new Bitmap(bt.Width, bt.Height);Graphics g = pbx.CreateGraphics();//Graphics g = Graphics.FromImage(backgroundImage);g.DrawLine(Pens.Black, startPoint, e.Location);g.Clear(Color.White);Pen myPen = new Pen(Color.Black, int.TryParse(ConfigurationManager.AppSettings["penwidth"], out int penwidth) ? penwidth : 3);//g.SmoothingMode = SmoothingMode.AntiAlias;//g.CompositingQuality = CompositingQuality.HighQuality;//g.CompositingMode = CompositingMode.SourceOver;//g.DrawImage(bt, bt.Width, bt.Height);PointF pointFstart = PointToPointF(startPoint);PointF pointFend = PointToPointF(e.Location);g.DrawBeziers(myPen, new PointF[] { pointFstart, pointFend });//pbx.BackgroundImage = backgroundImage;//g.Dispose();bt.Save("Fingerprint.jpg");this.pbx.BackgroundImage = System.Drawing.Image.FromStream(ms); #endregionbackgroundImage = new Bitmap(bt.Width, bt.Height, bt.PixelFormat);Graphics g = Graphics.FromImage(backgroundImage);g.SmoothingMode = SmoothingMode.AntiAlias;g.CompositingQuality = CompositingQuality.HighQuality;g.CompositingMode = CompositingMode.SourceOver;g.DrawImage(bt, 0, 0);backgroundImage.Save("Fingerprint11.jpg");//pictureBox1.Image = Image.FromHbitmap(backgroundImage.GetHbitmap());pictureBox1.Image = backgroundImage;g.Dispose();pictureBox1.Refresh();}}#region ok参数//MattingParameter parameter = new MattingParameter();初始化引擎//PaddleSegMattingEngine engine = new PaddleSegMattingEngine();//engine.Init(modelPath, parameter);设置背景颜色//engine.Setbackground(45, 145, 255);分割后的文件//string outfile = Guid.NewGuid().ToString() + ".png";//string outbgfile = Path.GetFileNameWithoutExtension(outfile) + "_bg.png";//engine.Seg(ofd.FileName, outfile, outbgfile); #endregion}this.Refresh();}/// <summary>/// 替换背景色/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnReplaceBackground_Click(object sender, EventArgs e){if (pictureBox1.Image != null){参数ok//MattingParameter parameter = new MattingParameter();初始化引擎//PaddleSegMattingEngine engine = new PaddleSegMattingEngine();//engine.Init(modelPath, parameter);设置背景颜色//Color bgcolor = Color.White;//ColorDialog colorDialog = new ColorDialog();//colorDialog.Color = bgcolor;//if (colorDialog.ShowDialog() != DialogResult.OK) return;//bgcolor = colorDialog.Color;//engine.Setbackground(bgcolor.R, bgcolor.G, bgcolor.B);engine.Setbackground(45, 145, 255);分割后的文件//string outfile = Guid.NewGuid().ToString() + ".png";//string outbgfile = Path.GetFileNameWithoutExtension(outfile) + "_bg.png";engine.Seg("小一寸.png", outfile, outbgfile);engine.Seg(new Bitmap("小一寸.png"), outfile, outbgfile);//engine.Seg(pictureBox1.Image, outfile, outbgfile);engine = new PaddleSegMattingEngine();engine.Init(modelPath, parameter);Color bgcolor = Color.White;ColorDialog colorDialog = new ColorDialog();colorDialog.Color = bgcolor;if (colorDialog.ShowDialog() != DialogResult.OK) return;bgcolor = colorDialog.Color;engine.Setbackground(bgcolor.R, bgcolor.G, bgcolor.B);//engine.SetbackgroundFile("");string outfile = path + Guid.NewGuid().ToString() + ".png";string outbgfile = path + Path.GetFileNameWithoutExtension(outfile) + "_bg.png";engine.Seg(pictureBox1.Image, outfile, outbgfile);//engine.Setbackground(45, 145, 255);分割后的文件//string outfile = "C:\\" + Guid.NewGuid().ToString() + ".bmp";//engine.Seg("C:\\Users\\Administrator\\Desktop\\1.jpg", outfile, "mask图路径");pictureBox2.Image = new Bitmap(outfile);}}/// <summary>/// 替换背景图/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSetBackground_Click(object sender, EventArgs e){if (pictureBox1.Image != null){engine = new PaddleSegMattingEngine();engine.Init(modelPath, parameter);OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = fileFilter;if (ofd.ShowDialog() != DialogResult.OK)return;engine.SetbackgroundFile(ofd.FileName);string outfile = path + Guid.NewGuid().ToString() + ".png";string outbgfile = path + Path.GetFileNameWithoutExtension(outfile) + "_bg.png";//string outfile = path + "1.png";//string outbgfile = path + "1_bg.png";engine.Seg(pictureBox1.Image, outfile, outbgfile);pictureBox2.Image = new Bitmap(outfile);}}private void btnSave_Click(object sender, EventArgs e){if (pictureBox2.Image != null){SaveFileDialog fileDialog = new SaveFileDialog();fileDialog.Filter = "Image files (JPeg, Gif, Bmp, etc.)|*.jpg;*.jpeg;*.gif;*.bmp;*.tif; *.tiff; *.png|" +"JPeg files (*.jpg;*.jpeg)|*.jpg;*.jpeg |GIF files (*.gif)|*.gif |BMP files (*.b" +"mp)|*.bmp|Tiff files (*.tif;*.tiff)|*.tif;*.tiff|Png files (*.png)| *.png |All f" +"iles (*.*)|*.*";if ((fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)){string path = fileDialog.FileName.ToString();pictureBox2.Image.Save(path);}}}private void btnOCR_Click(object sender, EventArgs e){//OpenFileDialog ofd = new OpenFileDialog();//ofd.Filter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";//if (ofd.ShowDialog() != DialogResult.OK)//    return;//var imagebyte = File.ReadAllBytes(ofd.FileName);//Bitmap bitmap = new Bitmap(new MemoryStream(imagebyte));//OCRModelConfig config = null;//OCRParameter oCRParameter = new OCRParameter();//OCRResult ocrResult = new OCRResult();//using (PaddleOCREngineengine = new PaddleOCREngine(config, oCRParameter))//{//    ocrResult = engine.DetectText(bitmap);//}//if (ocrResult != null)//{//    MessageBox.Show(ocrResult.Text, "识别结果");//}}}
}

这篇关于C# 证件照替换底色与设置背景图---PaddleSegSharp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014472

相关文章

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图