Numpy初级案例一:打马赛克的实现

举报
yd_259031995 发表于 2022/10/15 13:55:36 2022/10/15
【摘要】 经过上次对numpy简单的认识,相信家人们都非常想了解我们目前可以使用它做什么了 那么我们就举两个实战例子来进行说明 今天我们先以numpy打马为例 Are you ready?

前言

经过上次对numpy简单的认识,相信家人们都非常想了解我们目前可以使用它做什么了

那么我们就举两个实战例子来进行说明

今天我们先以numpy打马为例

Are you ready?

numpy打马赛克

1.方法引入

在开始前我们需要额外的引入几个方法,来显示我们的图片

至于其具体细节,我们先不要管,我们只需要输入:

import matplotlib.pyplot as plt
%matplotlib inline

2.图片导入

ok,我们随便找一个图片来进行操作

比如,我找了个名为Zacarx,jpg的图片

然后,我们把它放到同目录下

然后,这样操作:

img = plt.imread('./Zacarx.jpg')
img
>>array([[[249, 236,  61],
        [244, 231,  56],
        [237, 224,  50],
        ...,
        [251, 201,  42],
        [255, 205,  46],
        [255, 208,  49]],

       [[249, 236,  59],
        [245, 232,  57],
        [239, 226,  52],
        ...,
        [250, 200,  41],
        [254, 204,  45],
        [255, 206,  47]],

       [[252, 240,  60],
        [249, 237,  57],
        [243, 230,  53],
        ...,
        [248, 198,  39],
        [251, 201,  42],
        [253, 203,  44]],

       ...,

       [[135, 166, 125],
        [103, 131,  91],
        [ 97, 123,  84],
        ...,
        [120, 155,  65],
        [120, 155,  65],
        [120, 155,  65]],

       [[137, 168, 127],
        [103, 131,  91],
        [ 96, 122,  83],
        ...,
        [120, 155,  65],
        [120, 155,  65],
        [120, 155,  65]],

       [[138, 169, 128],
        [104, 132,  92],
        [ 95, 121,  82],
        ...,
        [120, 155,  65],
        [120, 155,  65],
        [120, 155,  65]]], dtype=uint8)

我们输入img显示的是基本信息,而且因为这是个彩色图片,所以它以三位的方式显示了出来。

然后我们可以输入

plt.imshow(img)

来显示图片,如图:

Snipaste_2022-10-14_19-41-16

当然我们也可以使用

img.shape

来查看图片大小,如图:

Snipaste_2022-10-14_19-44-12

1080与1080说的是横纵所对应的分辨率

3所说的是三原色

3.图片截取

下来,我们也可以进行图片的截取:

Snipaste_2022-10-14_19-46-46

[ ]里面放的是横纵参数的范围,比如200:1000就是200到1000像素的横值

50:900可以类比一下,横纵都写出来就代表对应的面积了

4.图片打马

当然,我们需要打马赛克的地方不是这里,而是邪恶莫蒂身后的瑞克

我们可以先把瑞克老爷截取出来

然后在进行打码操作,操作如下:

Snipaste_2022-10-15_13-41-15

我们一行一行的解析

rick = img[700:1050,0:120]

表示的是截取700-1500与0-120所围成的面积,也就是我们的瑞克老爷

rick = rick[::10,::10]

每十个像素取一个,使分辨率降低10*10倍

plt.imshow(rick)

显示图片

那好,这样我们就得到了一张打了马赛克的rick老爷

5.原图替换

那么,我们就可以进行最后一步了

Snipaste_2022-10-15_13-47-47

我们肯定不能直接放上去,因为rick.jpg分辨率降低了100倍,那么大小也小了一百倍,所以,我们不妨利用for语句对之放大

这样就得到了我们想要的效果了,是不是很简单?

快去找一个你想打马赛克的图片试试吧!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。