python图像处理-像素操作换背景(上)

  • 2020 年 3 月 12 日
  • 笔记

前言

本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。

背景

以前玩乐高的时候,发现大颗粒里面有很多人仔,想着把它们拍下来当素材,但是又没有专业的设备,只能用手机拍摄,但是手机拍摄发现会留下阴影,后来想着用python尝试着处理了一下,把背景变成了白色的了,总体看上去还不错。

之所以可以处理阴影,是因为前景人物和背景白色区别比较明显,经过这次尝试后,发现既然可以处理这样的纯背景的,那给他换一个背景应该也是可以的,下面就是我的尝试过程。

知识准备

进行图片处理之前,我们首先得对图片的色彩模式有个了解,这里暂时介绍RGBA和RGB两种模式,RGB是(red,green,blue)三种颜色的首字母组合一起的,RGBA是在三种颜色之上在加了一个透明通道(Alpha)。

画画的时候,通过调整不同颜料的比例,就可以得到不同的颜色;图片的色彩也是同样的原理,RGB颜色模式的图片可以理解为由红色,绿色,蓝色三种颜色混合而成。

RGBA除了颜色混合之外,还具有了透明的功能,比如半透明你就能看到当前内容的下面的内容了。

获取图片颜色模式和像素值

打开本地的yezi.jpg图片,通过mode属性可以获取到图片的颜色模式,使用convert方法可以对其进行颜色模式的转换。

通过img.size获取图片大小,宽959,高959个像素,这里的像素你可以理解成1个小格子,整张图片你可以看成宽和高为959*959的大网格。通过getpixel方法可以获取图片上某点的像素,也就是网格像素。结果可以看出RGB格式的img图片是三个255这个其实就是个白点,img2是RGBA模式,后面的255表示完全不透明。

具体理解可以看下面的图片。

找到一个调色板,可以看见右下角通过不同的颜色组合是可以实现不同的效果的,三个 0 是黑色,3个255是白色。

更改图片的像素值

通过使用putpixel方法将原来100,100位置的白色像素点设置为黑色的了,通过打印和查看图片效果可以知道。

画一条黑线

这里通过循环的方式将一小片区域的像素都更改了,所以看上去就会有一条黑线了。