依赖:

using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
int threshold = 255 - 20;

        InitializeComponent();Bitmap dstBitmap = null;using (Image image = Image.FromFile(@"test2.bmp")){using (Bitmap bitmap = new Bitmap(image)){using (Mat src = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap))//bitmap转 mat{using (Mat matMask = new Mat(src.Rows, src.Cols, MatType.CV_8UC4)){//去除白色背景,得到人物的遮罩图RenderMask(src, matMask, threshold);//接下来使用上步骤的图做为遮罩对原始帧图像进行背景透明处理using (Mat dst = new Mat(src.Rows, src.Cols, MatType.CV_8UC4)){MergeMask(src, dst, matMask);dstBitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(dst); // mat 转 bitmap}}}}}panel2.BackgroundImage = dstBitmap;}/// <summary>/// 生成遮罩层/// </summary>/// <param name="src"></param>/// <param name="matMask"></param>/// <param name="threshold"></param>private unsafe void RenderMask(Mat src, Mat matMask, int threshold){int rows = src.Rows;int cols = src.Cols;for (int x = 0; x < rows; x++){Vec4b* srcRow = (Vec4b*)src.Ptr(x);Vec4b* maskRow = (Vec4b*)matMask.Ptr(x);for (int y = 0; y < cols; y++){var pData = srcRow + y;var maskPData = maskRow + y;byte blue = pData->Item0;byte green = pData->Item1;byte red = pData->Item2;byte alpha = pData->Item3;//阀值判断if (blue <= threshold || green <= threshold || red <= threshold){//把没超过阀值的转换成白色maskPData->Item0 = 255;maskPData->Item1 = 255;maskPData->Item2 = 255;maskPData->Item3 = 255;}else{//把超过阀值的转换成黑色maskPData->Item0 = 0;maskPData->Item1 = 0;maskPData->Item2 = 0;maskPData->Item3 = 0;}}}}/// <summary>/// 合并遮罩/// </summary>/// <param name="src">原始帧图像</param>/// <param name="dst">合并结果</param>/// <param name="alpha">透明遮罩</param>public static void MergeMask(Mat src, Mat dst, Mat alpha){using (ResourcesTracker t = new ResourcesTracker()){//split is used for splitting the channels separatelyvar srcBgr = t.T(Cv2.Split(src));var alphaBgr = t.T(Cv2.Split(alpha));var bgra = new[] { srcBgr[0], srcBgr[1], srcBgr[2], alphaBgr[3] };Cv2.Merge(bgra, dst);}}
}

}

C# OpenCvSharp 抠证件照的人物图像,并生成透明背景相关推荐

  1. Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background)

    Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background) 目录

  2. java抠图人物背景图片_PS扣取纯色背景的人物图像

    本菜鸟将为大家讲解下PS扣取纯色背景的人物图像.如证件照和前期摄影作品,好了,下面我们来学习吧! 方法/步骤 1.首先,我们先用Photoshop打开我们准备好的文件.图像为纯色背景的.最好人物与背景 ...

  3. 论文笔记--基于 FCM 聚类的跨模态人物图像标注方法-2015

    期刊论文-基于 FCM 聚类的跨模态人物图像标注方法-2015-微型电脑应用-赵昀,张翌翀 文末附人脸标注相关论文下载地址 文章目录 摘要 技术 人脸检测与特征表示(与2012年吴伟硕士论文<跨 ...

  4. 两张二维人物图像互相换脸代码

    之前看了一篇介绍两张二维人物图像互相换脸代码:http://www.cnblogs.com/wm123/p/5370064.html,但是配置环境挺麻烦文章没讲清楚,而且代码有问题,特此重新写个清楚的 ...

  5. php 生成性格图片,PS制作个性文字人物图像教程

    这篇教程是向PHP中文网的朋友介绍利用PS制作个性文字人物图像方法,教程制作出来的效果真的很有个性,难度不是很大,推荐到PHP中文网,喜欢的朋友可以跟着教程一起来学习,希望能对大家有所帮助 ! 原图素 ...

  6. 深度学习--识别(四小人)人物图像

    岁月匆匆如流水,青春一去不回头.近2年来,随着AI等技术的发展,目前深度学习对图像,语音,文字等已经比较成熟,我也来跟跟风,拿人物图像练练手. 下面是我采用的是DenseNet卷积神经网络模型来训练 ...

  7. 深度学习实战23(进阶版)-语义分割实战,实现人物图像抠图的效果(计算机视觉)

    大家好,我是微学AI,今天给大家带来深度学习实战23(进阶版)-语义分割实战,实现人物图像抠图的效果.语义分割是计算机视觉中的一项重要任务,其目标是将图像中的每个像素都分配一个语义类别标签.与传统的目 ...

  8. 怎么把人物抠图到另一个背景上?这几种抠图方法很实用

    怎么把人物抠图放到另一个背景上呢?抠出人物图像可以轻松地将人物放入不同的背景中,从而创造出更加丰富的视觉效果.通过更改背景,可以改变照片的整体氛围,带来不同的感受和体验.也能更好地突出人物本身,使其更 ...

  9. matlab画梅花,基于Matlab图像素描生成算法究.doc

    毕 业 文 图像素描生成算法研究 姓 名 院(系) 信息学院 专业班级 学 号 指导教师 职 称 论文答辩日期 年月日 摘 要 分析比较图像处理提供参考.关键词: 目 录 1 前言1 1.1 课题研究 ...

最新文章

  1. win系统下nodejs安装及环境配置
  2. android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
  3. 验算双中心重叠积分程序
  4. oracle 11g常用命令
  5. boost::ratio_greater_equal相关的测试程序
  6. 【BZOJ - 3993】星际战争(网络流最大流+二分)
  7. mifare classic 2.2.3中文_Adobe Lightroom Classic CC 2019 v8.4.1 中文完整直装版
  8. ELK(ElasticSearch+LogStash+Kibana)搭建
  9. html将数据永久保存起来,数据保存(永久保存)方式(示例代码)
  10. 游戏建模中游戏人物设计要点是什么?
  11. 内网liunx环境升级nginx版本(因为nginx 0.6.x < 1.20.1 1-Byte Memory Overwrite RCE 系统漏洞而升级)
  12. emacs java自动import_[转]emacs 代码自动补齐的三个方法
  13. C# 扫描并读取图片中的文字
  14. 加油站都需要什么手续_开办加油站需要办哪些手续?
  15. mysql 五舍六入_四舍六入五成双(适用于MYSQL)(最大支持小数点第9位)
  16. 未接响铃1秒是什么意思_空调能耗等级是什么意思 家用有必要买1级空调吗 看了它就明白了...
  17. matlab 如何使用mex
  18. 如何将SQL语句进行自动翻译
  19. 建网站需要哪些费用?(软件方面)
  20. screenshot python_Selenium3+python异常后截图(screenshot)

热门文章

  1. python车牌精确定位
  2. java 常见io流 万字详解
  3. 马德里商标注册注意事项
  4. 【深度学习笔记】cs231n neural networks 3
  5. element的table扩展列打开位置更换
  6. C语言:输入三个整数x,y,z,请把这三个数由小到大输出。
  7. 自己玩玩ios逆向工程
  8. 在图片的左上角加上一个图片标签
  9. Android应用开发-数据存储和界面展现
  10. 3、Pull解析、SQLite、单元测试、ListView