Python-opencv利用setMouseCallback实现美图秀秀磨皮魔法笔
Python-opencv实现美图秀秀磨皮魔法笔
- 前言
- 一、涉及技术
- 1.Opencv鼠标响应setMouseCallback()
- 2.双边滤波
- 二、具体实现
- 1.代码
- 2.结果展示
- 3.一些注释
前言
最近有时间写一写博客,突发奇想实现一个鼠标点击对面部磨皮效果的demo,写的比较简单仅供大家学习参考。
一、涉及技术
1.Opencv鼠标响应setMouseCallback()
OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数
语法格式如下:
cv2.setMouseCallback(windowName,dc)
相关参数说明如下:
- windowName:创建窗口的名字
- dc:鼠标响应函数,回调函数
回调函数格式
dc(event,x,y,flags,param)
相关参数说明如下:
- event 是鼠标事件,具体事件如下所示
- x,y 是鼠标点击时图像的坐标
- flags 是CV_EVENT_FLAG的组合
- param 是自定义传递到setMouseCallback函数的参数
event 具体说明如下:
- EVENT_MOUSEMOVE //滑动
- EVENT_LBUTTONDOWN //左键点击
- EVENT_RBUTTONDOWN //右键点击
- EVENT_MBUTTONDOWN //中键点击
- EVENT_LBUTTONUP //左键放开
- EVENT_RBUTTONUP //右键放开
- EVENT_MBUTTONUP //中键放开
- EVENT_LBUTTONDBLCLK //左键双击
- EVENT_RBUTTONDBLCLK //右键双击
- EVENT_MBUTTONDBLCLK //中键双击
2.双边滤波
语法格式如下:
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
相关参数说明如下:
- src:待处理图像
- d:过滤时,每个像素邻域的直径范围
- sigmaColor: 颜色空间过滤器的sigma值
- sigmaSpace: 坐标空间中滤波器的sigma值
二、具体实现
1.代码
import cv2
import numpy as npix,iy=-1,-1
# 画笔半径
radius = 8# 人脸磨皮
def face_dermabrasion(cut_image,mask,x,y):# 创建待处理图像pending_image = cv2.bitwise_and(cut_image, cut_image, mask=mask)# 双边滤波blur_img = cv2.bilateralFilter(pending_image, 15, 60, 60)# 图像融合fusion_img = cv2.addWeighted(pending_image, 0.3, blur_img, 0.7, 0)not_mask = 255 - maskback_img = cv2.bitwise_and(fusion_img, fusion_img, mask=mask)# cv2.imshow('back_img',back_img)front_img = cv2.bitwise_and(cut_image, cut_image, mask=not_mask)# cv2.imshow('front_img',front_img)result_img = cv2.add(back_img, front_img)# cv2.imshow('result_img',result_img)img[y-(2*radius):y+(2*radius),x-(2*radius):x+(2*radius)] = result_imgdef dc(event,x,y,flags,param):global ix,iymask = np.zeros([img.shape[0],img.shape[1]],dtype=np.uint8)# 鼠标左键点击if event==cv2.EVENT_LBUTTONDOWN:ix,iy=x,y# print(ix,iy)cv2.circle(mask, (ix, iy), radius, (255, 255, 255), -1)cut_image = img[iy-(2*radius):iy+(2*radius),ix-(2*radius):ix+(2*radius)]new_mask = mask[iy-(2*radius):iy+(2*radius),ix-(2*radius):ix+(2*radius)]face_dermabrasion(cut_image,new_mask,ix,iy)if __name__ == '__main__':# 读取图像img = cv2.imread('g:/face.jpg')cv2.namedWindow('img')cv2.setMouseCallback('img',dc)while(1):cv2.imshow('img',img)cv2.waitKey(1)&0xFF
2.结果展示
左边为原图,大概用鼠标点了几个地方,没有全部处理,效果如右图所示。
3.一些注释
- 运行时发现了一点小bug,选取边缘的时候没有设置图像边界,更改一下图像边界就可以了,在此不做修改了~
- 画笔半径设置成了全局变量可以控制画笔半径的大小,后续可拓展成界面输入参数
Python-opencv利用setMouseCallback实现美图秀秀磨皮魔法笔相关推荐
- android 动态显示多张图片,美图秀秀上线“魔法照片”功能:静态图片秒变动态大片!...
一键生成大片,教你制作化静为动的"魔法照片" "魔法照片"的灵感来源于哈利波特的魔法世界,在神奇的魔法加持下,一张静态报纸中的人物竟然动了起来,现在这种神奇的效 ...
- html放多张gif动态背景图片,美图秀秀上线“魔法照片”功能:静态图片秒变动态大片...
[TechWeb]6月5日,美图秀秀最新推出基于AI技术的隐藏功能-"魔法照片",包括头发流动.鲜花环绕.花瓣变身.滤色叠加.空间位移.火焰星云等10多种魔法效果,用户可以将静态照 ...
- 美图秀秀神奇消除笔 轻松抹掉路人甲
外出看风景,拍张照片留纪念,却时常有路人来抢镜,相信这种纠结大家应该都有遇到过吧?或许你也曾想过很多办法,裁掉?不能消除干净又会影响构图效果.覆盖?不是面目全非就是难度太大.近日听说"美图秀 ...
- SNS:美图秀秀的社交化变革
2019独角兽企业重金招聘Python工程师标准>>> 上个月,美图秀秀的新版本进行了大规模改动,宣布进军社交方向,转型工具+社交平台.最新版本直接将社区放在首页,不需要再做点击跳转 ...
- 美图秀秀完美消除抢镜杂物 提升画面美感
走进大自然,轻嗅着迷人的花香.呼吸着清新的空气,目光所及之处都是怡人的景致,这就是旅游所带给人的惬意,所以我们会在旅游时,将所见的美景尽收进相机镜头留念.可是在一些风景照中,总有些杂物抢镜,真是大大降 ...
- 美图秀秀2015年实习生android应用开发方向招聘笔试题
美图秀秀的实习生笔试题总体上比较简单,考察的比较基础,主要是自己比较low,有些题当时都木有做出来.下面整理了两道当时没做出来的题目. 1(JAVA题).打印九九乘法表,要求:只能使用一次for循环, ...
- 十行代码,我用Python做一个迷你版的美图秀秀!
美图秀秀相信大家都不陌生,大家只要操作美图秀秀,就可以P掉图片中脸上的一些瑕疵,让人变得更加的美丽.今天小编就带领大家来借助Python和Flask来实现一个美图秀秀的网页设计,大家只需要通过网页上传 ...
- 教你把Python当美图秀秀用
Python中有一个第三方图像数据库,由于其强大功能和简单易用的API几乎被认为是Python平台上的官方图像处理库了,它就是PIL(PythonImage Library). 很多人学习python ...
- Python 图像 一样大小_教你把Python当美图秀秀用(一)
本文作者:钱梦璇 文字编辑:孙晓玲 技术总编:张 邯 导读 Python中有一个第三方图像数据库,由于其强大功能和简单易用的API几乎被认为是Python平台上的官方图像处理库了,它就是PIL(P ...
最新文章
- matlab怎么分析一段音频,Matlab分析音频
- 2019年东莞特长生 散步
- rror Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that
- jzoj4249-游戏【贪心】
- 动态创建标记+css_dom+js动态效果
- oracle临时表空间组,证明临时表空间组在并发session时的作用
- 鸿蒙电脑操作系统最新消息,5G专家预测:7年后鸿蒙将成全球第一大操作系统
- (后端)解决code唯一码(java)简便方法
- 在linux中docker安装mysql_Linux系统:用docker安装mysql。
- actor对自己不可见
- 实现简单的Java内存缓存
- spring-第N篇整合SSM,即Mybatis+Spring+Spring MVC
- 产品经理面试问题及答案大全《一》
- comsol 超声声场模拟_Comsol Multiphysics 声场仿真模块整体介绍
- php整人代码,HTML代码整人。。
- Unity修改编辑器
- Python:井字棋游戏
- python圣诞节快乐_圣诞节快乐,利用Python给自己的微信头像添加一个圣诞帽
- 兔子繁殖问题:一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死,一月份抱来一对刚出生的小兔子,问一年中每个月各有多少对兔子(C++)(迭代法)
- 除中国中医药数据库官网外-必备5个其它常用中国中医药数据库
热门文章
- EAS BOS 序时簿动态列的实现
- 南京NLP算法岗中小厂汇总
- 福昕PDF不能标记的原因和解决方法
- 记,罗盘时钟使用js实现
- java中加减乘除优先级_java运算符优先级
- 图[评委计分系统-双屏标准版]用PowerPoint制作比赛评分系统,用VC++制作控制台,PPT集成技术佼佼者,国内唯一
- 数字图像处理:图像缩放和降低灰度级
- 图像去噪--代码实现
- 合并或注销重复领英帐号,利用领英高效开发客户技巧。置顶收藏
- c语言oled p14x16str,51单片机加OLED12864显示汉字遇到的奇葩现象