背景

最近项目需要用人脸检测技术把视频里面的人脸检测出来后,进行马赛克处理,人脸检测这一块就是大家熟知的利用深度学习技术来解决,之前有相关文章介绍Python 人脸检测方法总结,这篇文章主要介绍马赛克处理过程。

马赛克原理

图片是由一个三维数组,打马赛克就是把特定区域的值替换为其他值,项目在做的过程中经过一次升级,最开始用的是高斯马赛克,后来应客户的要求,升级为和其他软件手工打的马赛克一样的样式正规马赛克

高斯马赛克

特定区域值替换为高斯分布数值,可以利用numpy中的np.random.normal(size=(h,w))来生成一些随机的数值,然后进行替换即可

正规马赛克

马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内左上像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓。就是用左上角的那个值,来替换右下方一个小方块的值,逐步进行替换即可。

代码

高斯马赛克

import cv2

import numpy as np

face_location=[430,500,730,870] #x1,y1,x2,y2 x1,y1为人脸左上角点;x2,y2为人脸右下角点

img=cv2.imread('./tongliya.jpg') #opencv读取的是BGR数组

##高斯马赛克

def normal_mosaic(img, x1, y1, x2, y2):

img[y1:y2, x1:x2, 0] = np.random.normal(size=(y2-y1, x2-x1))

img[y1:y2, x1:x2, 1] = np.random.normal(size=(y2-y1, x2-x1))

img[y1:y2, x1:x2, 2] = np.random.normal(size=(y2-y1, x2-x1))

return img

x1=face_location[0]

y1=face_location[1]

x2=face_location[2]

y2=face_location[3]

img_mosaic=normal_mosaic(img, x1, y1, x2, y2)

cv2.imwrite('img_mosaic_normal.jpg',img_mosaic)

正规马赛克

import cv2

import numpy as np

face_location=[430,500,730,870] #x1,y1,x2,y2 x1,y1为人脸左上角点;x2,y2为人脸右下角点

img=cv2.imread('./tongliya.jpg') #opencv读取的是BGR数组

#正规马赛克

def do_mosaic(img, x, y, w, h, neighbor=9):

"""

:param rgb_img

:param int x : 马赛克左顶点

:param int y: 马赛克左顶点

:param int w: 马赛克宽

:param int h: 马赛克高

:param int neighbor: 马赛克每一块的宽

"""

for i in range(0, h , neighbor):

for j in range(0, w , neighbor):

rect = [j + x, i + y]

color = img[i + y][j + x].tolist() # 关键点1 tolist

left_up = (rect[0], rect[1])

x2=rect[0] + neighbor - 1 # 关键点2 减去一个像素

y2=rect[1] + neighbor - 1

if x2>x+w:

x2=x+w

if y2>y+h:

y2=y+h

right_down = (x2,y2)

cv2.rectangle(img, left_up, right_down, color, -1) #替换为为一个颜值值

return img

x=face_location[0]

y=face_location[1]

w=face_location[2]-face_location[0]

h=face_location[3]-face_location[1]

img_mosaic=do_mosaic(img, x, y, w, h, neighbor=15)

cv2.imwrite('img_mosaic.jpg',img_mosaic)

效果

原图

高斯马斯克

正规马赛克

历史相关文章

以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号DataShare,不定期分享干货

python图片马赛克_利用Python对图片进行马赛克处理相关推荐

  1. python制作图片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  2. python批量生成图片_利用Python批量生成任意尺寸的图片

    实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- imp ...

  3. python将excel转换成图片格式_利用python将图片转换成excel文档格式

    前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...

  4. python照片墙地图_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  5. python图色检测_利用python打开摄像头及颜色检测方法

    最近两周由于忙于个人项目,一直未发言了,实在是太荒凉了....,上周由于项目,见到Python的应用极为广泛,用起来也特别顺手,于是小编也开始着手学习Python,-下面我就汇报下今天的学习成果吧 小 ...

  6. python 词云_利用Python生成词云

    利用Python生成词云 一.第三方库的安装与介绍 1.1  Python第三方库jieba(中文分词) 1.介绍 "结巴"中文分词:做最好的 Python 中文分词组件. 2.特 ...

  7. python爬虫背景_利用Python代码实现一键抠背景功能

    前言 又是一个逛csdn发现的一个有趣的小项目,可以一键抠背景,需要用到removebg模块及其API,API可从其官网免费获取,网址如下https://www.remove.bg/zh ps:加上/ ...

  8. python代码物理_利用python求解物理学中的双弹簧质能系统详解

    前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质 ...

  9. python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合

    本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...

  10. python pdf报告_利用python设计PDF报告,jinja2,whtmltopdf,matplotlib,pandas

    转自:https://foofish.net/python-crawler-html2pdf.html 工具准备 弄清楚了网站的基本结构后就可以开始准备爬虫所依赖的工具包了.requests.beau ...

最新文章

  1. python批量pdf转word,python批量实现Word文件转换为PDF文件
  2. 【个人成长学习讨论小组】练习2:角色
  3. /etc/fstab自动挂载文件详解
  4. 20145203 《信息安全系统设计基础》第十三周学习总结
  5. Android开发之ApiCloud模块开发步骤
  6. Linux文件、目录权限及常用命令
  7. win32_bios 的对象编辑器无法保存对象_怎样创建Femap对象
  8. AJAX with JSP and Servlet(代码)
  9. Day46:数据库引擎、索引、pymysql
  10. 凝结11年技术实力 弹性计算国内首著发布
  11. iOS 防键盘遮挡
  12. 为什么员工辞职时,领导都要象征性挽留一下?
  13. LogBack 日志压缩产生上百G的tmp文件问题
  14. 人与自然超越彩虹-下
  15. uni-app学习:CSS之flex布局居中
  16. CC2530 + RFX2401C Zigbee模块
  17. MFC CList使用
  18. 电子招投标系统EBD
  19. 【Android】Android开源项目分类汇总
  20. 关于maven更新超时问题显示报错

热门文章

  1. ps时间轴制作渐隐动态签名
  2. 1075c语言程序设计答案,山东理工大学ACM平台题答案关于C语言 1075 Doubles
  3. 【生活中的逻辑谬误】稻草人谬误和无力反驳不算证明
  4. Linux 性能调试 之 drop_caches
  5. iPhone4s(iOS 6.1.3 越狱) 登录微信(6.2.0.19)
  6. Egret引擎的常用倒计时
  7. 计算机网卡实现的功能,网卡实现的主要功能是什么
  8. matlab中断概率仿真,使用Matlab进行误比特率仿真
  9. 架构师之路(二)-概念架构
  10. phpstudy编写php扩展,PHP_探讨:如何编写PHP扩展,用C/C++扩展PHP的优缺点:优点 - phpStudy...