使用python求出图片每个像素的RGB颜色

休息了一个月,从今天开始继续更新文章!但愿你们喜欢。python

最近在研究怎么破解验证码,其中就要利用到识别出像素颜色的技术。git

你也能够用PS慢慢地进行取样记录,但那样效率很是低下,并且麻烦。github

识别验证码须要咱们高效地提取出像素,并将其转换成黑白二色,这样才好进行矢量对比。微信


工具:函数

pillow库工具

若是你有PyCharm的话,能够在Preferences内的Project Interpreter中安装pillow.spa

若你没有PyCharm.请上网查阅安装流程,很是简单。.net


几个要用到的比较重要的函数(你能够先跳过,遇到不认识的函数再回来查看):3d


建议直接阅读PIL的英文文档:http://effbot.org/imagingbook/image.htmcode


1.image.new(mode,size,color)

使用给定的变量modesize生成新的图像。mode是图片模式,如"RGB"、"P"。Size是给定的宽/高二元组,这是按照像素数来计算的。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每一个通道对应一个值)。


2.im.convert(mode)

将你打开的图片转化为某种格式。


3.im.getpixel(xy)

返回给定位置的像素。


4.im.putpixel(xy,color)

修改给定位置的像素。


5.im.size()

返回两个元素,宽和高。im.size ⇒ (width, height)

如果变量名.size[0]则即是是宽,size[1]则表示是高


使用的图片:



from PIL import Image

im = Image.open("1.jpg")

for y in range(im.size[1]):
for x in range(im.size[0]):
pix = im.getpixel((x,y))
print(pix)


运行结果很长,咱们截取一部分:



不得不说Python实在很强大。

不过这样看实在很麻烦,由于像素这么多,咱们不可能手动地去分析数据。

若是咱们要算出RGB各个位低于100的数量,咱们能够这样作:


from PIL import Image
im = Image.open("1.jpg")
count = 0
for y in range(im.size[1]):
for x in range(im.size[0]):
pix = im.getpixel((x,y))
if(pix[0] < 100 and pix[1] < 100 and pix[2] < 100):
count = count + 1
print(count)


结果是265743.

咱们甚至能够把它们转换成别的颜色。

最好是不在原图上操做,咱们new一个同样大小的图片便可。


im2 = Image.new("RGB",im.size,255)


意思是新建一个跟它同样大的RGB图片,背景颜色为红色。

咱们把刚刚各个位低于100的像素转化为白色。


from PIL import Image
im = Image.open("1.jpg")
im2 = Image.new("RGB",im.size,255)
count = 0
for y in range(im.size[1]):
for x in range(im.size[0]):
pix = im.getpixel((x,y))
if(pix[0] < 100 and pix[1] < 100 and pix[2] < 100):
im2.putpixel((x,y),(255,255,255))
im2.show()


结果:



若是咱们对原图进行修改颜色:




嘛,仍是能够接受的。




源代码已经上传到公众号的github项目。

之后公众号的源代码及图片都能在这里找到:https://github.com/Ckend/GongZhongHao


欢迎关注微信公众号:幻象客

www.huanxiangke.com



本文分享自微信公众号 - Python实用宝典(pythondict)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索