用Python帮你上马,哪里无码打哪里
目录
0 引言
1 环境
2 需求分析
3 代码实现
4 代码全景展示
5 后记
0 引言
所谓的像素图,就是对图像做一个颗粒化的效果,使其产生一种妙不可言的朦胧感。费话不多说,先来看一张效果图。

▲效果图

▲原图
怎么样,效果还不错吧?现在,我们用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)
5 后记
本文使用了PIL加上Numpy的配合,短短几行代码实现了图像像素化的处理。当然这只是一种简单地实现,要想实现更丰富的处理效果,还可以借助CV2来实现。
好了,以上就是本篇全部内容。
公众号「Python专栏」后台回复:「马赛克」,获取本文所涉及的完整代码。
用Python帮你上马,哪里无码打哪里的更多相关文章
- Python基础-字符编码与转码
***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...
- Python虚拟机函数机制之无参调用(一)
PyFunctionObject对象 在Python中,任何一个东西都是对象,函数也不例外.函数这种抽象机制,是通过一个Python对象——PyFunctionObject来实现的 typedef s ...
- 用Python帮你实现IP子网计算
目录 0. 前言 1. ipaddress模块介绍 1.1 IP主机地址 1.2 定义网络 1.3 主机接口 1.4 检查address/network/interface对象 1.4.1 检查IP版 ...
- Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)
二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...
- Python 练习册--生成唯一激活码(邀请码)
题目是这样子的: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 分析 其实要生成 ...
- 让大蛇(Python)帮你找工作
前段时间用Python实现了一个网络爬虫(让大蛇(Python)帮你找工作),效率总体还可以,但是缺点就是每次都需要手动的去触发,于是打算对该爬虫加上Timer,经过网上一番搜索以及API的查询,发现 ...
- Python智能检测编码并转码
#安装包工具 $pip3 install chardet #直接打开文件,中文显示乱码 >>> import chardet >>> f = open('test. ...
- Python Django中QQ邮箱授权码问题
Python Django中QQ邮箱授权码问题 系统及软件版本如下: Ubuntu Kylin 16.04 Python 3.5.1 Django 1.9.7 PyCharm Community Ed ...
- Cobub无码埋点关键技术的实现
随着大数据时代的到来,数据采集也已经变的越来越重要.前端埋点作为一个比较成熟的数据接入手段被广泛应用着.目前埋点分为两种方式,有码与无码埋点.有码埋点比较容易理解,即调用SDK的API,在代码中插入埋 ...
随机推荐
- 读取树莓派4B处理器(CPU)的实时温度
读取树莓派4B处理器(CPU)的实时温度 树莓派发布4B后,性能提升了不少,但是温度也是高的不行,所以最好配置一个小风扇和散热片还是比较好的 俩种办法都可以实现 1.Shell命令读取 打开终端 cd ...
- CAD画三维图怎么渲染?一分钟教你快速操作
从事过CAD相关工作的都知道,CAD绘制的方式有二维平面图以及三维图形,三维图形,画三维图方式也是比较简单的.那当然三维图画完后一般还需要进行渲染操作,步骤也是比较简洁的.下面就来给大家操作一下CAD ...
- python web框架Flask——后台登录
项目搭建 创建一个项目之后,需要在手动创建几个包(含有__init__.py文件的目录)和文件 1.在主目录下创建配置文件:config.py 2.在主目录下创建扩展文件:exts.py 3.在主目录 ...
- 新手教程丨利用Python制作一款截图识别软件!
进入正文前给大家推荐一个微软开发的工具:Snipaste. 这是一款截图软件,把截出的图片放置到窗口上,可以随意移动,使用非常方便,并且支持各类电脑系统. 先简单介绍一下它的用法,F1截图,Ctrl+ ...
- 使用Dynamics 365 CE Web API查询数据加点料及选项集字段常用查询
微软动态CRM专家罗勇 ,回复336或者20190516可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me. 紧接上文:配置Postman通过OAuth 2 implicit ...
- Wireshark使用教程:不同报文颜色的含义
- 设置 色彩规则有两个入口,一个在报文上方的工具栏内,如图: 那个鲜艳的图标就是色彩规则的入口. 另一个是view-->coloring rules菜单. 点击进去即可看见所有的色彩规则的设置 ...
- Qt 显示图片
QImage qImag("img.jpg"); //qImag = qImag.scaled(width, height); //缩放图片 qImag = qImag.scale ...
- 彻底解决Python3写爬虫或网站时的乱码问题
第一次写贴子,试试水 很多玩Python3的都会遇到编码问题,如果直接去处理未知编码的网页,不是Python内部编码格式utf8会出现乱码,下面介绍一种将未知编码的字串转换为utf8来避免乱码的方法, ...
- Android框架之EventBus的使用
简介 EventBus是由greenrobot组织贡献的一个Android事件发布/订阅的轻量级框架.EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用 ...
- git本地忽略
添加本地忽略文件 git update-index --assume-unchanged 忽略的文件名 恢复本地忽略文件 git update-index --no-assume-unchanged ...