资讯专栏INFORMATION COLUMN

用Python帮你上马,哪里无码打哪里

waltr / 1375人阅读

摘要:不同尺寸的图像,要达到最佳的像素化的显示效果,所需要设置的单位像素块的大小也是不同的,实践出真知。我们需要图像的指定一个处理范围,并对该范围内的每一个坐标像素点进行像素化的处理。公众号专栏后台回复马赛克,获取本文所涉及的完整代码。

目录
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:PersonalLuoShen.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:PersonalLuoShen.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专栏」后台回复:「马赛克」,获取本文所涉及的完整代码。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44096.html

相关文章

  • 病有所查,UCloud助力无码科技发动云上医疗数字引擎

    摘要:除此之外,无码科技还推出抽奖助手和等流量和工具产品。目前无码科技旗下用户数过亿,由医疗用户和非医疗用户构成。无码科技产品负责人邱岳介绍。此外,在高性能的支持下,无码科技在人工智能领域的技术得以不断推进。无症状新冠疫情要如何判断?家附近哪里有疫苗接种点接种疫苗有什么注意事项……新冠疫情爆发后,医疗小程序就诊问问上,关于新冠疫情的搜索量出现明显增长。就诊问问是无码科技旗下专注医疗健康搜索的小程序...

    Tecode 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • Python基础知识之文件的读取操作

    摘要:如果该文件已存在,文件的初始指针在文件的结尾。文件中只有一句话十步杀一人,千里不留行。关闭文件如果用来打开文件的话就不用管关闭文件的操作了,因为已经帮你完成了这一步,否则必须在处理文件之后加上关闭文件的操作 读取文件的操作步骤 有一道脑筋急转弯,问把大象装进冰箱的步骤,答案很简单,打开冰箱、把大象推进去、关闭冰箱。这就是一个处理问题的思路,我们对文件的操作和这个一样,第一步:打开文件;...

    zeyu 评论0 收藏0
  • 业务开发中的调试方法总结

    摘要:业务开发中的调试方法总结这段时间,接触了单元测试,同时业务中遇到了一些需要排错调试的情况,就把自己的经验做个小结。但是如果你的业务经常变化,但是变化的部分并不会影响单元测试,那这种情况下的单元测试性价比就很高。 业务开发中的调试方法总结 这段时间,接触了单元测试,同时业务中遇到了一些需要排错调试的情况,就把自己的经验做个小结。 3种调试方法 狼叔说,常见的三种调试的境界 初级: 打l...

    KaltZK 评论0 收藏0
  • 笔记|软件调试的技巧

    摘要:在软件世界里,观察意味着设置断点添加调试语句监视程序值以及检查内存在医学领域,需要测试血样和进行光透视。福尔摩斯,最后一案如果你不修复,它不会自动消失。修复解决问题的能力,是软件工程师的核心竞争力之一。 这篇文章是《调试九法:软硬件错误的排查之道》的阅读笔记。这本书的主旨,是介绍如何修复bug:找出bug发生的原因、并给出修复方案。 调试bug的九个规则列举如下,建议将这个清单打印出来...

    DirtyMind 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<