CSharp: Image Matting
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Windows.Media.Imaging; //PresentationCore //WindowsBase using System.Windows.Media; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Net; using System.IO; using System.Net.Http; using System.Text; public partial class Default2 : System.Web.UI.Page { /// <summary> /// 2020-12-26 涂聚文(Geovin Du) /// 人像抠图 百度AI的API /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Page_Load( object sender, EventArgs e) { JsonSerializerSettings settings = new JsonSerializerSettings(); // string sToken = AccessToken.getAccessToken(); JToken st = JToken.Parse(sToken); JObject jsonst = JObject.Parse(sToken); BaiduAITokenData we = JsonConvert.DeserializeObject<BaiduAITokenData>(sToken); //Response.Write(we.access_token+"<br/><br/>"); // string sResult = body_seg(); JToken jt = JToken.Parse(sResult); JObject jsonimg = JObject.Parse(sResult); BaiduAIBody body = JsonConvert.DeserializeObject<BaiduAIBody>(sResult); // Bitmap bmp = GetImageFromBase64(body.foreground); this .Image1.ImageUrl = "data:image/png;base64," + body.foreground; //data:image/jpeg;base64, this .Image2.ImageUrl = "data:image/png;base64," + body.scoremap; //BitmapImage bmp = parseImageFromBase64(body.foreground); } /// <summary> /// /// </summary> /// <param name="fileName"></param> /// <returns></returns> public String getFileBase64(String fileName) { FileStream filestream = new FileStream(fileName, FileMode.Open); byte [] arr = new byte [filestream.Length]; filestream.Read(arr, 0, ( int )filestream.Length); string baser64 = Convert.ToBase64String(arr); filestream.Close(); return baser64; } /// <summary> /// 人像图获取 /// </summary> /// <returns></returns> public string body_seg() { string token = AccessToken.TOKEN; // AccessToken.getAccessToken();// "[调用鉴权接口获取的token]"; string sToken = AccessToken.getAccessToken(); JToken st = JToken.Parse(sToken); JObject jsonst = JObject.Parse(sToken); BaiduAITokenData we = JsonConvert.DeserializeObject<BaiduAITokenData>(sToken); //Response.Write(token + "<br/>"); string host = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg?access_token=" + we.access_token; Encoding encoding = Encoding.ASCII; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "post" ; request.ContentType = "application/x-www-form-urlencoded" ; request.KeepAlive = true ; string file = Server.MapPath( "Images/涂聚文1.jpg" ); // 图片的base64编码 string base64 = getFileBase64(file); String str = "image=" + HttpUtility.UrlEncode(base64); // byte [] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII); string result = reader.ReadToEnd(); Console.WriteLine( "人像分割:" ); Console.WriteLine(result); //Response.Write(result); return result; } /// <summary> /// /// </summary> /// <param name="sBase64"></param> /// <returns></returns> BitmapImage parseImageFromBase64( string sBase64) { char [] c = sBase64.ToCharArray(); // Properties.Resources.testImgData .ToCharArray(); byte [] buffer = System.Convert.FromBase64CharArray(c, 0, c.Length); MemoryStream m = new MemoryStream(buffer); m.Position = 0; BitmapImage bmp = new BitmapImage(); bmp.BeginInit(); bmp.StreamSource = m; bmp.EndInit(); return bmp; } } |
百度AI开放平台-人像分割: http://ai.baidu.com/tech/body/seg
https://github.com/emgucv/emgucv C#
https://github.com/opencv/opencv_extra C++
https://github.com/opencv/opencv
https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/ Python
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /// <summary> /// 图像文件转Base64 Geovin Du /// </summary> /// <param name="filepath"></param> /// <returns></returns> public string ImageToBase64( string filepath) { string base64String = string .Empty; try { // string path = "D:\\SampleImage.jpg"; using (System.Drawing.Image image = System.Drawing.Image.FromFile(filepath)) { using (MemoryStream m = new MemoryStream()) { image.Save(m, image.RawFormat); byte [] imageBytes = m.ToArray(); base64String = Convert.ToBase64String(imageBytes); return base64String; } } } catch (Exception ex) { ex.Message.ToString(); } return base64String; } /// <summary> /// Base64转image /// </summary> /// <param name="base64String"></param> /// <returns></returns> public System.Drawing.Image Base64ToImage( string base64String) { byte [] imageBytes = Convert.FromBase64String(base64String); MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); ms.Write(imageBytes, 0, imageBytes.Length); System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true ); return image; } |
Background Removal API https://www.remove.bg/zh/g/developers
https://github.com/brilam/remove-bg python
https://github.com/mtownsend5512/remove-bg php
https://github.com/remove-bg/go go
https://github.com/remove-bg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //https://www.remove.bg/zh/api HttpClient client = new HttpClient(); // using (client = new HttpClient()); // using ( var formData = new MultipartFormDataContent()) { formData.Headers.Add( "X-Api-Key" , "geovindu 涂聚文 Geovin Du" ); formData.Add( new ByteArrayContent(File.ReadAllBytes(Server.MapPath( "Images/pdf.jpg" ))), "image_file" , Server.MapPath( "Images/2.jpg" )); formData.Add( new StringContent( "auto" ), "size" ); ////preview,full,auto,regular var response = client.PostAsync( "https://api.remove.bg/v1.0/removebg" , formData).Result; if (response.IsSuccessStatusCode) { FileStream fileStream = new FileStream(Server.MapPath( "Images/geovindu_no-bg.png" ), FileMode.Create, FileAccess.Write, FileShare.None); response.Content.CopyToAsync(fileStream).ContinueWith((copyTask) =>{ fileStream.Close(); }); } else { Console.WriteLine( "Error: " + response.Content.ReadAsStringAsync().Result); } } |
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /// <summary> /// 改换背景色 /// 把人像填色>150,<150 把背景色填写了 /// </summary> /// <param name="scrBitmap"></param> /// <param name="newColor">改为新的背景色</param> /// <returns></returns> public static Bitmap ChangeColor(Bitmap scrBitmap,Color newColor) { //https://stackoverflow.com/questions/17208254/how-to-change-pixel-color-of-an-image-in-c-net //You can change your new color here. Red,Green,LawnGreen any.. // Image imggree = Image.FromFile("green1.jpg"); // Bitmap grebt = new Bitmap(imggree); //得到背景色(从坐标1,1得到) // Color greenColor = grebt.GetPixel(1, 1); //Color newColor = greenColor;// Color.Green; Color actualColor; //actualColor = scrBitmap.GetPixel(1, 1); //make an empty bitmap the same size as scrBitmap Bitmap newBitmap = new Bitmap(scrBitmap.Width, scrBitmap.Height); for ( int i = 0; i < scrBitmap.Width; i++) { for ( int j = 0; j < scrBitmap.Height; j++) { //get the pixel from the scrBitmap image actualColor = scrBitmap.GetPixel(i, j); // > 150 because.. Images edges can be of low pixel colr. if we set all pixel color to new then there will be no smoothness left. if (actualColor.A < 150) //>150 人像改了颜色 newBitmap.SetPixel(i, j, newColor); else newBitmap.SetPixel(i, j, actualColor); } } return newBitmap; } |
https://darkcl.github.io/2017/01/24/background-removal/ C++
https://github.com/darkcl/Background-Removal-Example C++
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
分类:
CSharp code
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2016-12-26 Python 3.4 Library setup
2012-12-26 Csharp: print Card using HiTi CS310