当前位置: 首页 > news >正文

测试C#使用ViewFaceCore实现图片中的人脸遮挡

  基于ViewFaceCore和DlibDotNet都能实现人脸识别,准备做个遮挡图片中人脸的程序,由于暂时不清楚DlibDotNet返回的人脸尺寸与像素的转换关系,最终决定使用ViewFaceCore实现图片中的人脸遮挡。
  新建Winform项目,在Nuget包管理器中搜索并安装ViewFaceCore,实现人脸遮挡主要分两个步骤:
  1)检测人脸:调用ViewFaceCore模块的FaceDetector类识别人脸位置信息;
  2)人脸遮挡:调用GDI+的相关函数实现人脸遮挡,主要包括以下三种挡方式:
    a)纯色填充,此种方式主要调用Graphics.FillRectangle函数用指定颜色填充人脸区域,关键代码如下:

using (SolidBrush sb = new SolidBrush(selectColor))
{for (int i = 0; i < faces.Count; i++){e.Graphics.FillRectangle(sb,startX + faces[i].Face.Location.X * scale,startY + faces[i].Face.Location.Y * scale,faces[i].Face.Location.Width * scale,faces[i].Face.Location.Height * scale);}
}

    b)图片填充,此种方式主要调用Graphics.DrawImage函数用指定图片填充人脸区域,关键代码如下:

for (int i = 0; i < m_faces.Count; i++)
{e.Graphics.DrawImage(picMaskImage.Image,startX + faces[i].Face.Location.X * scale,startY + faces[i].Face.Location.Y * scale,faces[i].Face.Location.Width * scale,faces[i].Face.Location.Height * scale);
}

    c)马赛克效果填充,此种方式是人脸区域实现马赛克效果,与前两种方式不同之处在于,前两种方式可以不用直接操作图片,可以在panel控件中先绘制图片,再根据图片起始位置和当前缩放比例计算人脸在控件中的相对位置后再控件中填充颜色或图片,而马赛克效果需要操作图片中的像素,不便于直接在控件中操作,而是在图片中实现马赛克效果后仅在控件中显示最终图片效果。
  网上分析和实现马赛克效果的文章很多,本文采用参考文献1中的代码,并微调其中的马赛克实现函数(原文的函数将整个图片处理为马赛克,本文使用是改成了将图片指定矩形区域处理为马赛克)

  最后是程序运行效果:原始图形如下:
在这里插入图片描述
  纯色填充效果如下:
在这里插入图片描述
  采用图片填充效果如下:
在这里插入图片描述
  马赛克填充效果如下:
在这里插入图片描述

  测试代码放在GitHub,地址为:https://github.com/guochao2299/TestFaceMask
  

参考文献:
[1]https://blog.csdn.net/yinsefeixingchuan/article/details/123435426

相关文章:

测试C#使用ViewFaceCore实现图片中的人脸遮挡

基于ViewFaceCore和DlibDotNet都能实现人脸识别&#xff0c;准备做个遮挡图片中人脸的程序&#xff0c;由于暂时不清楚DlibDotNet返回的人脸尺寸与像素的转换关系&#xff0c;最终决定使用ViewFaceCore实现图片中的人脸遮挡。   新建Winform项目&#xff0c;在Nuget包管理器中…...

2.21 Qt day2 菜单栏/工具栏/状态栏/浮动窗口、UI界面、信号与槽

思维导图 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;…...

300分钟吃透分布式缓存-16讲:常用的缓存组件Redis是如何运行的?

Redis 基本原理 Redis 简介 Redis 是一款基于 ANSI C 语言编写的&#xff0c;BSD 许可的&#xff0c;日志型 key-value 存储组件&#xff0c;它的所有数据结构都存在内存中&#xff0c;可以用作缓存、数据库和消息中间件。 Redis 是 Remote dictionary server 即远程字典服务…...

上一篇文章补充:已经存在的小文件合并

对于HDFS上已经存在的大量小文件问题&#xff0c;有多种策略可以进行处理和优化&#xff1a; 1. **合并小文件**&#xff1a; - **使用Spark作业合并**&#xff1a;通过编写Spark程序读取小文件并调用repartition()或coalesce()函数重新分区数据&#xff0c;然后将合并后的…...

代码随想录训练营第三十期|第四十三天|动态规划 part05|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for (int n : stones) {sum n;}int target sum / 2;int[] dp new int[target 1];for (int i 0; i < stones.length; i…...

c++学习记录 string容器—字符串插入和删除

函数原型&#xff1a; string& insert(int pos,const char* s); //插入字符串string& insert(int pos,const string& str); //插入字符串string& insert(int pos,int n,char c); //在指定位置插入n个字符cstring&…...

【IEEE会议征稿】2024年第九届智能计算与信号处理国际学术会议(ICSP 2024)

2024年第九届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09; 2024年第八届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09;将在西安举行&#xff0c; 会期是2024年4月19-21日&#xff0c; 为期三天, 会议由西安科技大学主办。 欢迎参会&…...

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制 文章目录 前言一、脉振高频电压注入法简介&#xff08;注入在旋转坐标系的d轴&#xff09;1.旋转高频电压&#xff08;电流&#xff09;注入法2.脉振高频电压注入法 二、高频注入理论1.永磁同步电机的高频模型2…...

Java学习——集合框架

Java集合框架&#xff08;Java Collections Framework&#xff09;是一套性能优良、使用方便的接口和类的集合&#xff0c;它位于java.util包下。这个框架包含了一系列集合接口的标准实现&#xff0c;比如列表、集合、队列&#xff0c;以及映射。使用这些集合&#xff0c;你可以…...

【鸿蒙 HarmonyOS 4.0】UIAbility、页面及组件的生命周期

一、背景 主要梳理下鸿蒙系统开发中常用的生命周期 二、UIAbility组件 UIAbility组件是一种包含UI界面的应用组件&#xff0c;主要用于和用户交互。 UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口&#xff1b;一个UIAbility组件中可以通过多个页…...

jdk动态代理与CGLib动态代理

jdk动态代理 目标对象 package com.study;/*** 目标对象&#xff08;被代理的对象&#xff09;**/ public class Target implements TargetInf{public String name;public Target() {}public Target(String name) {this.name name;}public String buyCola (String name){Sys…...

Linux 命令行的世界 :4.操作文件和目录

此时此刻&#xff0c;我们已经准备好了做些真正的工作&#xff01;这一章节将会介绍以下命令&#xff1a; • cp —复制文件和目录 • mv —移动/重命名文件和目录 • mkdir —创建目录 • rm —删除文件和目录 • ln —创建硬链接和符号链接 图形文件管理器能轻松地实现…...

如何使用ArcGIS Pro生成等高线

无论在制图还是规划中&#xff0c;经常会使用到等高线&#xff0c;大多数情况下&#xff0c;从网上获取的高程数据都是DEM文件&#xff0c;我们可以通过ArcGIS Pro来生成等高线&#xff0c;这里为大家介绍一下生成方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的…...

golang学习2,golang开发配置国内镜像

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct...

Stable Diffusion 绘画入门教程(webui)-ControlNet(线稿约束)

上篇文章介绍了openpose&#xff0c;本篇文章介绍下线稿约束&#xff0c;关于线稿约束有好几个处理器都属于此类型&#xff0c;但是有一些区别。 包含&#xff1a; 1、Canny(硬边缘&#xff09;&#xff1a;识别线条比较多比较细&#xff0c;一般用于更大程度得还原照片 2、ML…...

前端笔记——var let const 之间的区别

Var&#xff1a; 关键字来声明变量。它有以下特点&#xff1a; var声明的变量作用域是函数级的&#xff0c;即在函数内部声明的变量在整个函数范围内可见。 var变量可以被重复声明&#xff0c;而不会引发错误。 var变量会存在变量提升&#xff08;hoisting&#xff09;现象&…...

AI工具新革命:从ChatGPT到Sora,生成式AI改变世界

这个春节着实精彩&#xff0c;“春山学”吃透了&#xff0c;不如把目光移向OpenAI又一重磅产品——文生视频大模型Sora。智能新纪元已然开启&#xff0c;因为正如周鸿祎所说&#xff1a;“,Sora的诞生意味着AGI&#xff08;通用人工智能&#xff09;的实现将从10年缩短到1年。”…...

C 标准库 - <stdio.h> 详解

在 C 语言中&#xff0c;stdio.h 是一个非常重要的头文件&#xff0c;定义了一系列用于输入和输出的函数、变量和宏。本文将逐一介绍 stdio.h 中定义的函数&#xff0c;并提供每个函数的完整示例。 变量类型 在 stdio.h 中定义了三个变量类型&#xff1a; size_t&#xff1a…...

支付宝小程序中唤起支付(前后端)

Java后台获取支付宝支付唯一订单号 /*** 支付宝小程序支付*/PostMapping(value "/xcxPayZFBTHREE")ResponseBodypublic Map<String,Object> xcxPayZFBTHREE(RequestBody byte[] req) {HashMap<String, Object> objectObjectMap new HashMap<>();…...

AI:139-基于深度学习的语音指令识别与执行

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…...

为什么92%的AI音频项目在ElevenLabs声音库选型阶段就失败?——资深AI音频架构师12年踩坑复盘

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的AI音频项目在ElevenLabs声音库选型阶段就失败&#xff1f; ElevenLabs 的声音库看似丰富——超 500 个语音模型、多语言支持、情感调节滑块一应俱全&#xff0c;但真实项目落地中&#xff0…...

0403开源:第四卷光刻机整机控制与量检测系统(A级 中期集中攻坚)3. 开源纳米级计量检测设备卡点

开源光刻机整机控制与量检测系统&#xff08;A级 中期集中攻坚&#xff09; 3. 开源纳米级计量检测设备卡点&#xff08;全参数开源硬核壁垒拆解喂饭级溯源破局&#xff09; 前置开源声明 本节全程无保留开源光刻量检测底层原理、设备架构、纳米级计量阈值、国内外参数对标、核…...

救命!毕业论文写到崩溃?这个神仙组合让我一周定稿[特殊字符]

从选题开题到答辩收尾&#xff0c;毕业论文是一场漫长的马拉松。选对工具&#xff0c;相当于给每个阶段都配上了加速器。 目前在专业论文写作领域&#xff0c;工具已分化为两条清晰的路线&#xff1a;全流程一站式平台&#xff08;如毕业之家&#xff09;和垂直领域深度工具&a…...

MQTT QoS压力测试:RyanMqtt消息可靠性深度剖析与实战避坑

1. 项目概述&#xff1a;为什么我们要死磕MQTT的QoS&#xff1f;最近在折腾一个物联网项目&#xff0c;后台服务用的是RyanMqtt。项目上线前&#xff0c;团队里有个兄弟随口问了句&#xff1a;“咱们这消息到底靠不靠谱&#xff1f;别设备上报的数据丢了&#xff0c;或者指令发…...

OpenClaw爬虫框架Docker化实践:从环境封装到生产部署

1. 项目概述&#xff1a;当“OpenClaw”遇见Docker最近在折腾一个挺有意思的项目&#xff0c;叫“OpenClaw”。这名字听起来有点酷&#xff0c;对吧&#xff1f;它本质上是一个网络爬虫框架&#xff0c;但设计理念和常见的Scrapy、Puppeteer这些不太一样。OpenClaw更侧重于“规…...

VPS自动化配置脚本:Shell脚本实现服务器安全与开发环境一键部署

1. 项目概述&#xff1a;一个为开发者量身打造的VPS自动化配置脚本如果你和我一样&#xff0c;经常需要快速部署新的VPS&#xff08;虚拟专用服务器&#xff09;来跑一些临时的项目、搭建测试环境&#xff0c;或者只是厌倦了每次都要重复那些繁琐的初始化步骤&#xff0c;那么你…...

Spek音频频谱分析器:从声音可视化到音频质量检测的完整指南

Spek音频频谱分析器&#xff1a;从声音可视化到音频质量检测的完整指南 【免费下载链接】spek Acoustic spectrum analyser 项目地址: https://gitcode.com/gh_mirrors/sp/spek 当你打开一个音频文件&#xff0c;听到杂音或失真时&#xff0c;是否想过如何精确诊断问题所…...

千川素材月烧3万外包费?用易元AI自建素材工厂,省70%成本跑量更猛

做千川投放的商家都深有体会&#xff1a;限制账户放量的从来不是预算&#xff0c;而是素材成本高、产能慢、优质有效素材稀缺。当下千川商家都陷入同一个困境&#xff1a;不做素材没法投放&#xff0c;大批量做素材又烧钱。一款产品要多卖点测试&#xff0c;投放计划需要持续补…...

从《现代微波滤波器》到CoupleFila:手把手教你打通耦合矩阵‘理论-软件-ADS’全链路

从理论到实践&#xff1a;耦合矩阵设计与ADS验证全流程指南 微波滤波器设计一直是射频工程师面临的核心挑战之一&#xff0c;而耦合矩阵作为设计过程中的关键工具&#xff0c;其重要性不言而喻。然而&#xff0c;许多初学者在接触这一领域时&#xff0c;往往被各种理论公式、计…...

双系统党必看:如何把Windows 11设为Ubuntu GRUB菜单的默认启动项(保姆级图文)

双系统用户终极指南&#xff1a;优雅配置GRUB默认启动Windows 11 作为一名长期在Windows和Ubuntu双系统间切换的用户&#xff0c;我完全理解那种开机时盯着GRUB菜单等待倒计时结束的焦躁感。特别是当你赶着开会却误入Ubuntu&#xff0c;或是深夜想打游戏却手滑选了错误选项时&a…...