本篇主要介绍使用numpy.ogrid 生成圆形(心形)模糊遮罩,可以用在对人脸检测后进行人脸的模糊处理。

主要的代码如下(其中涉及到人脸检测部分的可以参考使用mtcnn进行人脸检测):

from mtcnn.mtcnn import MTCNN
import cv2
import numpy as npimg = cv2.imread("test.jpg")
detector = MTCNN()face_list = detector.detect_faces(img) # face detect and alignmentdef generate_mask(img_height,img_width,radius,center_x,center_y):y,x=np.ogrid[0:img_height,0:img_width]# circle mask# mask = (x-center_x)**2+(y-center_y)**2<=radius**2  # generate other masks (eg. heart-shaped)scale = 5/radiusmask = 5*((-x+center_x)*scale)**2 - 6*np.abs((-x+center_x)*scale)*((-y+center_y)*scale) + 5*((-y+center_y)*scale)**2 < 128return maskmask_img = np.ones(img.shape,np.int8)
kernel_size = 15
blur_img = cv2.blur(img,(kernel_size,kernel_size))for face in face_list:box = face["box"]#boundingboxx,y,w,h = boxmask=generate_mask(img.shape[0],img.shape[1],max(w,h)/2,x+w/2,y+h/2)mask_img[mask]=[0,0,0]mask_img_verse = np.ones(img.shape,np.int8) - mask_img
result_img = mask_img * img + mask_img_verse * blur_imgcv2.imwrite("result.jpg",result_img)

圆形模糊的结果如下:

实际上,如果是要产生圆形的模糊,更简洁的方法是使用cv.circle()函数实现:

circle = np.zeros(img.shape, dtype="uint8")
cv2.circle(circle, (300, 300), 50, [0,0,0], -1)

借助numpy.ogrid和任意的图形函数可以产生任意形式的遮罩,例如产生心形的模糊遮罩:

其中使用的产生心形区域的代码为:

 scale = 5/radiusmask = 5*((-x+center_x)*scale)**2 - 6*np.abs((-x+center_x)*scale)*((-y+center_y)*scale) + 5*((-y+center_y)*scale)**2 < 128

心形线的产生函数为:5x^2 - 6|x|y + 5y^2 = 128
图像如下:

对心形进行适当的旋转、平移和缩放之后即可合适地遮住人脸(物体)。这里顺便推荐一个在线绘制函数曲线的网站Desmos。

人脸区域马赛克,圆形(心形)模糊Mask相关推荐

  1. Java打印各种形状 心形 菱形 三角形 圆形

    Java打印各种形状 心形 菱形 三角形 圆形 public class TestPrint {/*** 打印*号*/public static void main(String[] args) {/ ...

  2. 用matlab识别人脸是心形脸还是椭圆形脸

    重点内容#基于matlab的数字图像处理,由一张人脸图像,我们导入matlab只能进行灰度二值化处理,一张图片的灰度值为0-255,其中0为黑色,255为白色,中间为灰色,一张图片转换为二值化矩阵后, ...

  3. Android自定义View之三角,五角星,圆形,心形图片实现

    转载请标明出处:http://blog.csdn.net/joker_ya/article/details/38589677 好吧,写之前扯扯.如果是大神的话,可以忽略此文档.有兴趣的话也可以看看.这 ...

  4. android 画布心形,Android CustomShapeImageView对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等...

     Android CustomShapeImageView对图片进行各种样式裁剪:圆形.星形.心形.花瓣形等 Android CustomShapeImageView是github上一个第三方开源 ...

  5. java心形代码_使用java打印心型、圆形图案的实现代码_java

    相信对于打印三角形都没什么难度,只需要利用for循环嵌套使用就行 但是对于打印圆形和三角形不同因为到圆心距离相等的点一般不会横坐标和纵坐标都为整数 打印爱心 爱心的公式 (x²+y²-1)³-x²*y ...

  6. Android 心形图片心形ImageView、带边框的的心形图片和圆形图片

    源码地址:心形图片.心形ImageView.圆形图片.圆形ImageView 实际效果如下: 一.思路 1.图片尺寸:加载的图片尺寸不会完全统一,可以是正方形,长方形等,这里不需要考虑正方形,因为一般 ...

  7. 对图片进行各种样式裁对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等剪:圆形、星形、心形、花瓣形等--第三方开源--CustomShapeImageView

    CustomShapeImageView在github上的项目主页是:https://github.com/MostafaGazar/CustomShapeImageView 如果仅仅是需要获取圆形. ...

  8. JAVA for循环画图(包括圆形,心形)

    最近从JAVA转战C++基础东西也不敢直接不学,在听了老师的分支语句和循环语句以后想起来了以前自己上C语言课用这些东西画图形,一时感慨万千,做此笔记. 实心矩形 x,y分别为长和宽 public st ...

  9. java打印各种形状 正方形、正三角形、圆形、心形、菱形

    java打印各种形状 正方形.三角形.圆形.心形.菱形 js输出菱形.金字塔.心形 请点击****** 展示代码: public class TestPrint {/*** 打印*号*/public ...

最新文章

  1. 20211005 Hermite矩阵及几个性质
  2. 设计友好的错误信息页面
  3. 第12章 使用Samba或NFS实现文件共享
  4. (转)学习密度与专注力
  5. Vue 中computed 与 methods 区别
  6. 媒体播放器三大底层架构
  7. linux6添加chkconfig管理,10、14 Linux系统服务管理工具-chkconfig
  8. rust新版组队指令_Rust最新控制台命令2017
  9. ELK - 实用日志分析系统
  10. Scala:未受重视却潜力巨大的Android编程语言
  11. ios之JavaScript
  12. 使用 SDK (Nodejs)操作阿里 OSS (对象存储服务)学习笔记
  13. [产品] 敏捷开发软件(一)——团队看板
  14. html模拟鼠标点击图标,易语言模拟鼠标点击实现方法
  15. 47.0.概率论与数理统计-两个正态总体均值差的置信区间
  16. 注意力机制+注意力汇聚
  17. pubwin2009服务端 修改系统时间方法
  18. HTML+CSS 编辑的(多列布局、相册、百度首页)、盒子模型
  19. 解决电脑无法进入休眠/睡眠状态,而仅关闭屏幕的问题
  20. GYM 101128H Sheldon Numbers

热门文章

  1. 终于来了:iOS 9.1越狱工具更新提升稳定性
  2. 光学efl_(完整版)光学专业英语
  3. print()函数的使用
  4. python照片转化立体_3-Sweep技术:2D转3D,让照片变立体,就是这么简单!
  5. Web3技术解析:构建下一代去中心化互联网
  6. 未来十年将是Web3.0发展的黄金十年
  7. (转)架构风格与基于网络的软件架构设计(介绍REST)
  8. Mybatis-Plus查询语句无故自动加条件
  9. mysql a左外连接b b左外连接c_数据库中的 内连接,外连接(左连接,左外连接,右连接,右外连接),全连接,交叉连接...
  10. 明略数据:用大数据分析找出数据间隐藏的关联性