通过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 相关文章推荐
Python splitlines使用技巧
Sep 06 Python
Python实现全角半角转换的方法
Aug 18 Python
pip matplotlib报错equired packages can not be built解决
Jan 06 Python
Python实现抢购IPhone手机
Feb 07 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
Python实现自动签到脚本的示例代码
Aug 19 Python
Django如何实现防止XSS攻击
Oct 13 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 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连接Oracle数据库
2006/10/09 PHP
PHP批量生成缩略图的代码
2008/07/19 PHP
php SQL Injection with MySQL
2011/02/27 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
谈谈JS中的!!
2017/12/07 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
护理专业毕业生自我鉴定
2013/10/08 职场文书
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
军训生自我鉴定范文
2013/12/27 职场文书
努力学习保证书
2015/02/26 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
退休教师欢送会致辞
2015/07/31 职场文书