通过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 图片去噪的方法示例
图像可能在生成.传输或者采集过程中夹带了噪声,去噪声是图像处理中常用的手法.通常去噪声用滤波的方法,比如中值滤波.均值滤波.但是那样的算法不适合用在处理字符这样目标狭长的图像中,因为在滤波的过程中很有可能会去掉字符本身的像素. 一个采用的是去除杂点的方法来进行去噪声处理的.具体算法如下:扫描整个图像,当发现一个黑色点的时候,就考察和该黑色点间接或者直接相连接的黑色点的个数有多少,如果大于一定的值,那就说明该点不是离散点,否则就是离散点,把它去掉.在考察相连的黑色点的时候用的是递归的方法.此处,我
-
详解利用python+opencv识别图片中的圆形(霍夫变换)
在图片中识别足球 先补充下霍夫圆变换的几个参数知识: dp,用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像分辨率低的累加器.上述文字不好理解的话,来看例子吧.例如,如果dp= 1时,累加器和输入图像具有相同的分辨率.如果dp=2,累加器便有输入图像一半那么大的宽度和高度. minDist,为霍夫变换检测到的圆的圆心之间的最小距离,即让我们的算法能明显区分的两个不同圆之间的最小距离.这个参数如果太小的话,多个相邻的圆可能被错误地检测成了一个重合的圆.反之,这个
-
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
在处理图像的时候经常是读取图片以后把图片转换为灰度图.作为一个刚入坑的小白,我在这篇博客记录了四种处理的方法. 首先导入包: import numpy as np import cv2 import tensorflow as tf from PIL import Image 方法一:在使用OpenCV读取图片的同时将图片转换为灰度图: img = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE) print("cv2.imread(imgfile, cv2.I
-
python实现从本地摄像头和网络摄像头截取图片功能
python-----从本地摄像头和网络摄像头截取图片 ,具体代码如下所示: import cv2 # 获取本地摄像头 # folder_path 截取图片的存储目录 def get_img_from_camera_local(folder_path): cap = cv2.VideoCapture(0) i = 1 while True: ret, frame = cap.read() cv2.imshow("capture", frame) print str(i) cv2.imw
-
python opencv对图像进行旋转且不裁剪图片的实现方法
最近在做深度学习时需要用到图像处理相关的操作,在度娘上找到的图片旋转方法千篇一律,旋转完成的图片都不是原始大小,很苦恼,于是google到歪果仁的网站扒拉了一个方法,亲测好用,再次嫌弃天下文章一大抄的现象,虽然我也是抄歪果仁的. 废话不多说了,直接贴代码了. def rotate_bound(image, angle): # grab the dimensions of the image and then determine the # center (h, w) = image.shape[
-
使用Python opencv实现视频与图片的相互转换
因为最近要经常转换数据集进行实验,因此记录一下. 1.视频转图片 即为将视频解析为一帧一帧的图片: import cv2 vc=cv2.VideoCapture("/home/hqd/PycharmProjects/1/1/19.MOV") c=1 if vc.isOpened(): rval,frame=vc.read() else: rval=False while rval: rval,frame=vc.read() cv2.imwrite('/home/hqd/PycharmP
-
python 使用plt画图,去除图片四周的白边方法
用matplotlib.pyplot画的图,显示和保存的图片周围都会有白边,可以去掉.为了显示的更清楚,给图片加了红色的框 代码 "` import matplotlib.pyplot as plt fig, ax = plt.subplots() im = im[:, :, (2, 1, 0)] ax.imshow(im, aspect='equal') plt.axis('off') # 去除图像周围的白边 height, width, channels = im.shape # 如果dpi
-
通过python改变图片特定区域的颜色详解
首先让我祭出一张数学王子高斯的照片,这位印在德国马克上的神人有多牛呢? 他是近代数学的奠基人之一,与牛顿, 阿基米德并称顶级三大数学家,随便找一个编程语言的数学库,里面一定有和他名字相关的一堆函数. 开始正文之前,让我们再来膜拜一下19岁的高斯如何用一把圆规和没有刻度的尺子画出正十七边形. 下面我就拿高斯这张肖像画作为示例如何用Python将他帽子的颜色换了. 计算机分析图片不可能像人类的肉眼一样进行观察,再用右脑进行思考,它能识别的只有数字,下面我们从计算机的角度来对图片做一个简单的认知. 机
-
python实现图片处理和特征提取详解
这是一张灵异事件图...开个玩笑,这就是一张普通的图片. 毫无疑问,上面的那副图画看起来像一幅电脑背景图片.这些都归功于我的妹妹,她能够将一些看上去奇怪的东西变得十分吸引眼球.然而,我们生活在数字图片的年代,我们也很少去想这些图片是在怎么存储在存储器上的或者去想这些图片是如何通过各种变化生成的. 在这篇文章中,我将带着你了解一些基本的图片特征处理.data massaging 依然是一样的:特征提取,但是这里我们还需要对跟多的密集数据进行处理,但同时数据清理是在数据库.表.文本等中进行.这是如何
-
python为图片和PDF去水印详解
目录 安装模块 获取图片的 RGB 图片去水印 PDF 去水印 图片转为 pdf 总结 网上下载的 pdf 学习资料有一些会带有水印,非常影响阅读.比如下面的图片就是在 pdf 文件上截取出来的. 安装模块 PIL:Python Imaging Library 是 python 上非常强大的图像处理标准库,但是只能支持 python 2.7,于是就有志愿者在 PIL 的基础上创建了支持 python 3的 pillow,并加入了一些新的特性. pip install pillow pymupdf
-
Python去除图片水印实现方法详解
目录 OpenCV介绍 去水印 图片去水印原理 最近写文章遇到图片有水印,如何去除水印呢? 网上找了各种办法,也跑到小红书.抖音等平台找有没有不收费就去水印的网站,但是基本上都是需要VIP会员才可以. 话又说回来这种事情怎么能难倒一个程序员呢?Python的库有这么多肯定有一款适合我吧? 于是找来了OpenCV. OpenCV介绍 文档链接:https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_tutorials.html Opencv(Ope
-
Python实现图片压缩的案例详解
目录 1.引言 2.PIL模块 2.1 quality 方式 2.2 thumbnail方式 3.OpenCV模块 3.1 安装 3.2 执行代码 4.总结 1.引言 小屌丝:鱼哥,求助,求助 小鱼:啥情况,这火急火燎的? 小屌丝: 我要在某站进行认证,上传图片时提示,图片超过本站最大xxx限制. 小鱼:就这?? 小屌丝:对啊,我又不想换照片,又不像照片失真. 小鱼:就这要求? 小屌丝:对,能赶紧帮我不处理不? 小鱼:嗯~ 理论上是可以. 小屌丝:什么都别说,我懂,枸杞一袋! 小鱼:懂我,五分钟
-
手机使用python操作图片文件(pydroid3)过程详解
起因 前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找pdf. 其实吧,关于心理学方面的书可以说在市面上一抓就是一堆,至于拍这本书两个原因,一个是没有什么收藏价值不值得我去买,只适合应急用,然后就是这本书的作者写作特点和其他大众的不太一样,可以说是有特点或者偏门,于是我就在手机上拍了一堆的图片,后来整理成了pdf,但是昨天我看的时候原图片文件还在快上千了吧,一个一个选择删除真是删烦了,也许你会说为什么不导入到电脑上进行删除,没办法我就是想整点不一样的,学了py
-
Python编程实现蚁群算法详解
简介 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法.它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为.蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质.针对PID控制器参数优化设计问题,将蚁群算法设计的结果与遗传算法设计的结果进行了比较,数值仿真结果表明,蚁群算法具有一种新的模拟进化优化方法的有效性和应用价值. 定义 各个蚂蚁在没有事先告诉
-
Python实现为图片添加水印的示例详解
目录 1.引言 2.filestools介绍 2.1 安装 2.2 filestools 功能介绍 2.3 watermarker模块介绍 2.4 代码实例 补充 1.引言 小屌丝:鱼哥,这个周末过得咋样 小鱼:酸爽~ ~ 小屌丝:额~~ 我能想到的,是这样吗? 小鱼:有多远你走多远. 小屌丝:唉,鱼哥,你别说,我觉得这个图片,跟你平时的表情挺贴切的. 小鱼:你想咋的!!!! 小屌丝:突然想到,能不能给你来一个专属的图片,例如追加水印啥的,让别人无图可盗!! 小鱼:嘿~ 你别说,还真的可以哈,
-
Python OpenCV实现图片预处理的方法详解
目录 一.图片预处理 1.1 边界填充(padding) 1.2 融合图片(mixup) 1.3 图像阈值 二.滤波器 2.1 均值滤波器 2.2 方框滤波器 2.3 高斯滤波器 2.4 中值滤波 2.5 所有滤波器按照上述顺序输出 一.图片预处理 1.1 边界填充(padding) 方法 : cv2.copyMakeBorder BORDER_REPLICATE:复制法,也就是复制最边缘像素. BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abc
-
Python 图片处理库exifread详解
[导语]:用 python 怎样获得图片的GPS信息?今天推荐一下 exifread 这个神奇的库,不仅仅是 GPS 信息,几乎能能获得图片的所有信息,快进来看看!! 要怎样获得拍摄图片的GPS呢?这里我们需要exifread 库,这个就是用来提取 GPS 信息的.直接 pip install exifread 来安装就好了. 其实不仅能获得GPS信息,图片的几乎所有信息都能获得.exifread的作用其实是代替了查看图片属性!如下图: 这里用在三亚拍的骆驼照片来做个演示,看看能不能定位到三亚.
随机推荐
- ThinkPHP中的常用查询语言汇总
- JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
- jsp实现生成中国国旗图片效果代码
- 怎么通过onclick事件获取js函数返回值(代码少)
- Java实现利用广度优先遍历(BFS)计算最短路径的方法
- iOS开发之widget实现详解
- JS调用打印机功能简单示例
- Android编程调用红外线遥控功能示例
- Windows系统中使用C#读取文本文件内容的小示例
- 关于火狐(firefox)及ie下event获取的两种方法
- 分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
- 教你Asp.net下使用mysql数据库的步骤
- 数据库清除日志文件(LDF文件过大)
- mysql 常用命令用法总结脚本之家整理版
- 简单JS代码压缩器
- jquery实现滑屏大图定时收缩为小banner图片的广告代码
- JavaScript中transform实现数字翻页效果
- Android开发之merge结合include优化布局
- C#模板方法模式(Template Method Pattern)实例教程
- 将OICQ数据转成MYSQL数据