通过python改变图片特定区域的颜色详解


Posted in Python onJuly 15, 2019

首先让我祭出一张数学王子高斯的照片,这位印在德国马克上的神人有多牛呢? 他是近代数学的奠基人之一,与牛顿, 阿基米德并称顶级三大数学家,随便找一个编程语言的数学库,里面一定有和他名字相关的一堆函数。

通过python改变图片特定区域的颜色详解

开始正文之前,让我们再来膜拜一下19岁的高斯如何用一把圆规和没有刻度的尺子画出正十七边形。

通过python改变图片特定区域的颜色详解

下面我就拿高斯这张肖像画作为示例如何用Python将他帽子的颜色换了。

计算机分析图片不可能像人类的肉眼一样进行观察,再用右脑进行思考,它能识别的只有数字,下面我们从计算机的角度来对图片做一个简单的认知。

机器的认知中任何一个图片都是由很多像素排列组成,每个像素点就是图片组成的最小原子,因此图片可以看作是一个二维数组,包含坐标和颜色。

其中坐标可以继续拆成一个二维数组分别是X轴和Y轴,而颜色用RGB来表示则可拆解为红绿蓝三维数组。

我先用python来几行简单代码把数学王子的照片转化为数组看看到底是什么内容。

通过python改变图片特定区域的颜色详解

看看打印结果的输出,这张图的像素有607行(宽度),474列(高度),也就是287718个像素组成了这张图片。我再用photoshop打开这张图片看看像素大小,完全匹配。

打印像素

通过python改变图片特定区域的颜色详解

核对像素

通过python改变图片特定区域的颜色详解

接下来再来几行代码把整张图片的矩阵打印出来看看,同时用photoshop框选一下高斯帽子的范围,大概是两个矩形的拼接,在此范围内我也挑几个点(帽子,皮肤,背景)打印出来看看。为何是两个矩形? 因为大神的眼珠也是黑色和帽子比较相似,所以绕道划取范围。

选取范围

通过python改变图片特定区域的颜色详解

采样打印

通过python改变图片特定区域的颜色详解

通过python改变图片特定区域的颜色详解

打印矩阵

通过python改变图片特定区域的颜色详解

简单分析一下规律,其实帽子,背景,皮肤的颜色色差还是比较明显的。为了让帽子从黑色变成红色就把RGB定为(200, 20, 20)先来两个两重循环把两个长方形拼接的范围都替换掉,重新调出图片看看效果,已经成功刷上红色了,接下来就要看如何更精准的上色。

通过python改变图片特定区域的颜色详解

通过python改变图片特定区域的颜色详解

接下来判断一下这个范围内的像素颜色哪些应该替换哪些应该保留。随便根据经验设置一下参数,看看效果再调整几次。

我选择的判断条件是RGB均小于45, 比较保守,因为画多了比较麻烦,画少了还可以修复。运行一下,果然按这个参数上色后覆盖不均匀,于是我加了个简单粗暴的颜色扩散方法,判断一下左右两边或者上下是否有红色,有则替换当前像素为红色。对比间距从大到小(10, 5, 2)修复了三次后效果就差不多了。

到此为止帽子的边缘还比较毛糙,颜色扩散的方式也比较粗暴,下一篇再研究如何用OpenCV的Canny Edge Detection勾画图案边缘,用Gaussian Blurring(看,高斯的名字又出现了)平滑处理交界处。

通过python改变图片特定区域的颜色详解

通过python改变图片特定区域的颜色详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
pyqt5简介及安装方法介绍
Jan 31 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
python3.5安装python3-tk详解
Apr 26 Python
深入了解Python iter() 方法的用法
Jul 11 Python
python实时检测键盘输入函数的示例
Jul 17 Python
Python中Unittest框架的具体使用
Aug 27 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
解决tensorflow/keras时出现数组维度不匹配问题
Jun 29 Python
如何解决pycharm调试报错的问题
Aug 06 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 #Python
python3实现斐波那契数列(4种方法)
Jul 15 #Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 #Python
django settings.py 配置文件及介绍
Jul 15 #Python
python项目对接钉钉SDK的实现
Jul 15 #Python
用Python识别人脸,人种等各种信息
Jul 15 #Python
django中账号密码验证登陆功能的实现方法
Jul 15 #Python
You might like
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
Vue.js数据绑定之data属性
2017/07/07 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
详解node和ES6的模块导出与导入
2020/02/19 Javascript
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
Python列表推导式实现代码实例
2020/09/09 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
《大自然的语言》教学反思
2014/04/08 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
春节超市活动方案
2014/08/14 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
学生党员检讨书范文
2014/12/27 职场文书
求职简历自我评价2015
2015/03/10 职场文书
护士求职自荐信
2015/03/25 职场文书
担保书格式范文
2015/09/22 职场文书