如何用Python帮你打码

这期内容当中小编将会给大家带来有关如何用Python帮你打码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

10年积累的成都网站设计、成都做网站、外贸网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有新余免费网站建设让你可以放心的选择与我们合作。

引言

所谓的像素图,就是对图像做一个颗粒化的效果,使其产生一种妙不可言的朦胧感。费话不多说,先来看一张效果图。

如何用Python帮你打码

如何用Python帮你打码

怎么样,效果还不错吧?现在,我们用Python来实现这种像素化的效果。

1 环境

  • 操作系统:Windows

  • Python版本:3.7.3

2 需求分析

一个最简单的实现思路,在打开图片后,把图片分割成一些像素块,再对这些像素块中的图像信息进行处理(修改图像中的RGB值)即可。

这里我们使用Numpy库和PIL库来实现这个需求,后者用来图像的读取与保存,涉及到的所有图像处理动作均借助Numpy来实现。

有关NumPy模块、PIL模块的介绍,可参考如下。

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

PIL(Python Imaging Library)是Python常用的图像处理库,而Pillow是PIL的一个友好Fork,提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

这两个模块非Python内置,都属于第三方模块,可直接采用如下方式进行安装。

pip install numpy
pip install Pillow
注意,要想使用PIL模块,是需要直接install Pillow模块的。

3 代码实现

首先导入我们要用到的模块

import numpy as np
from PIL import Image

接下来,我们要处理图片,首先得打开一张图片,如下

data = Image.open("P:\Personal\LuoShen.xpg")

然后把图像转换化Numpy数组进行下一步的处理

im1 = np.array(data)

这里处理的核心思想,也很简单,主要通过中间值的RGB,对所选范围块的RGB进行重新赋值。

im1[y:y + pixel, x:x + pixel] = im1[y + (pixel // 2)][x + (pixel // 2)]

这里的x、y是分别指的我们图像的横向、纵向像素点的坐标值、而pixel指的是我们要以多大的像素块,来处理这张图像,我们设置的单位像素块(Pixel数值)越小,生成的像素图越精确。

当然了,若单位像素块设置的太小,生成图像就看不出效果了,至于多大的数值合适,需要自行尝试。不同尺寸的图像,要达到最佳的像素化的显示效果,所需要设置的单位像素块的大小也是不同的,实践出真知。

我们需要图像的指定一个处理范围,并对该范围内的每一个坐标(像素)点进行像素化的处理。

for y in range(Start_coordinate[1], End_coordinate[1], pixel):
 for x in range(Start_coordinate[0], End_coordinate[0], pixel):
 pass

在处理完成之后,我们再把Numpy数组转换回图像。

im2 = Image.fromarray(im1.astype(np.uint8))

最后展示出处理后的图像

im2.show()

4 代码全景展示

import numpy as np

from PIL import Image

def to_pixelBlock(pixel, Start_coordinate, End_coordinate):

'''

:param pixel: 单位像素块的元素大小

:param Start_coordinate: 处理的起始坐标(像素)点,元组形式

:param End_coordinate: 处理的终止坐标(像素)点,元组形式

:return:

通过中间值的RGB,对所选范围块的RGB进行重新赋值,设置的单位像素块(Pixel数值)越小,生成的像素图越精确

'''

# 读取图片,并由 PIL image 转换为 NumPy array

im1 = np.array(Image.open("P:\Personal\LuoShen.jpg"))

# 遍历所要处理范围内的所有坐标(像素)点

for y in range(Start_coordinate[1], End_coordinate[1], pixel):

for x in range(Start_coordinate[0], End_coordinate[0], pixel):

# 通过中间值的RGB,对所选范围块的RGB进行重新赋值

im1[y:y + pixel, x:x + pixel] = im1[y + (pixel // 2)][x + (pixel // 2)]

# 将NumPy array 转换为 PIL image

im2 = Image.fromarray(im1.astype(np.uint8))

# 展示处理后的图像

im2.show()

if __name__ == '__main__':

# 设置好要处理的像素范围,并以多大的像素块来生成最终效果图

to_pixelBlock(10, (0, 0), (1280, 800)

使用了PIL加上Numpy的配合,短短几行代码实现了图像像素化的处理。当然这只是一种简单地实现,要想实现更丰富的处理效果,还可以借助CV2来实现。

上述就是小编为大家分享的如何用Python帮你打码了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


当前文章:如何用Python帮你打码
分享地址:http://bzwzjz.com/article/poegep.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 外贸网站建设 网站建设 成都网站建设 手机网站建设套餐 成都网站制作 成都网站建设 app网站建设 重庆网站制作 成都网站设计公司 重庆企业网站建设 定制网站设计 成都商城网站建设 成都网站建设 网站制作 四川成都网站建设 营销网站建设 定制级高端网站建设 重庆电商网站建设 成都网站制作 高端品牌网站建设 响应式网站设计 自适应网站建设