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

 更新时间:2019年07月15日 16:15:47   作者:Jeru_d39e  
这篇文章主要介绍了通过python改变图片特定区域的颜色详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

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

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

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

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

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

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

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

打印像素

核对像素

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

选取范围

采样打印

打印矩阵

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

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

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

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

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

相关文章

  • Python使用wget实现下载网络文件功能示例

    Python使用wget实现下载网络文件功能示例

    这篇文章主要介绍了Python使用wget实现下载网络文件功能,简单介绍了wget安装以及Python使用wget下载tar格式网络文件并进行解压处理相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • Python学习之直方图均衡化原理详解

    Python学习之直方图均衡化原理详解

    直方图均衡化是以累计分布函数为核心,将原始图像灰度直方图从比较集中的某个灰度区间,非线性地映射为在全部灰度范围内的较均匀分布,从而增强对比度。本文将为大家详细讲解直方图均衡化的原理,需要的可以参考一下
    2022-03-03
  • Python通用验证码识别OCR库ddddocr的安装使用教程

    Python通用验证码识别OCR库ddddocr的安装使用教程

    dddd_ocr是一个用于识别验证码的开源库,又名带带弟弟ocr,下面这篇文章主要给大家介绍了关于Python通用验证码识别OCR库ddddocr的安装使用教程,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 浅谈Python中的正则表达式

    浅谈Python中的正则表达式

    正则表达式广泛用于与文字、字符串的格式化,放到Python里使用,再合适不过.尤其是在编写爬虫时,用正则表达式匹配URL、匹配IP等,正则表达式都是一个简单、高效的选择,需要的朋友可以参考下
    2021-06-06
  • 仅利用30行Python代码来展示X算法

    仅利用30行Python代码来展示X算法

    这篇文章主要介绍了仅利用30行Python代码来展示X算法,同时还有对算法实现的复杂度的说明,需要的朋友可以参考下
    2015-04-04
  • 基于Python3读写INI配置文件过程解析

    基于Python3读写INI配置文件过程解析

    这篇文章主要介绍了基于Python3读写INI配置文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Python操作MySQL模拟银行转账

    Python操作MySQL模拟银行转账

    这篇文章主要为大家详细介绍了Python操作MySQL模拟银行转账,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python使用循环实现批量创建文件夹示例

    python使用循环实现批量创建文件夹示例

    这篇文章主要介绍了python使用循环实现批量创建文件夹示例,需要的朋友可以参考下
    2014-03-03
  • 使用Python字典实现词频统计的方法

    使用Python字典实现词频统计的方法

    在Python中,利用字典进行词频统计是一种常见且强大的方式,通过对文本进行预处理并使用字典数据结构,可以轻松地统计文本中每个单词出现的频率,下面将详细解释这个过程,并提供多种例子,以帮助你更好地理解并应用这一技术,需要的朋友可以参考下
    2023-12-12
  • pandas分组排序 如何获取第二大的数据

    pandas分组排序 如何获取第二大的数据

    这篇文章主要介绍了pandas分组排序 获取第二大的数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论