python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...

237f4465abb74176a4f8f2fefff5eb0d.png

这次的教学非常简单,只需要安装了python模式的processing就可以(安装教程见专栏目录)。我从网上找了一个比100*100稍微大一点的图片,你可以也找一个。然后我们就可以一起开始今天的学习啦~(请先阅读本专栏中的processing入门教程部分)

35c18e817c946ed6cceb07a2611b2bf3.png
本专栏中的processing入门教程部分

关于图片:图片请找一个类似大小的,然后放在processing工程的文件夹中。打开某个processing工程文件夹的快捷方法是这样的:先新建一个空白processing文件并保存,然后在速写本中就能找到“打开程序目录”了。

0abf076faae52362b3ae13670f0b5243.png
打开程序目录

processing读取并展示图片

def 

上面就是一个完整的小程序啦。

54bcc669f986886eaeabe4b1d58157e0.png

操作图片的像素向量

def 

这里用到的图片相关的内置函数有点多,但是不难理解。我们逐个讲解:

img.pixels 是存储图片像素的列表,每个像素用一个color常量表示。

img.loadPixels() : 用于产生img.pixels。执行了这一句之后,img.pixels 才能被正常访问。

img.updatePixels():让processing根据我们对img.pixels的更改,来更改对应的图片。注意让list的大小在更改后保持和原先一致。

而color(0, 0, 0)中的三个值分别代表了RGB的一个值,并返回一个颜色常量。

在这个程序里,我们把像素矩阵中的前1000个点涂黑,效果如下:

93e422e80f74db832e2f5fbed3ef4af3.png
遮挡上边部分

向量和矩阵来回转化

可能在上一部分中,当我说到“像素向量”的时候,有一部分机智的同学就会有疑问了:“像素不应该是组成一个矩阵,也就是列表的列表吗?”。我们先看一下官方文档中对于img.pixels的描述:

8806688ee5337e350fbcd028b6135f29.png
img.pixels

然后再结合上个程序的效果,我们大胆猜测,这个向量代表的意思是把图片中的矩阵一行行的拼接成一个向量。我们可以写一个程序验证一下:

def 

请自己运行观看效果,这里只提供一个截图:

6379cd55d2615e80fc82e95e3ac88a65.png
动态遮挡

从这个动画可以看出,img.array究竟是以怎样的方式表示一个图片的。其中用到了变色的小技巧,不熟悉的同学可以把颜色用color(0, 0, 0)代替。

那么我们到这里就把像素向量怎么和图片像素的对应关系给搞清楚了。现在我们就写一个函数来做图片像素向量和普通矩阵(列表的列表)之间的转换。

def 

这就是我写出的函数。整个函数非常的pythonic。感兴趣的同学可以自己测试一下这两个函数,下面我们直接使用这两个函数做进一步的编程。

程序:遮挡住图片的左边部分

def 

539f38a627968e0c10ba7dde6a901082.png
遮挡左边部分

让图片动起来

有了上个章节中的两个向量矩阵转换函数,我们就可以做更加更加复杂的操作了。比如说,让图片进行循环滚动:

# 把上个程序中的draw()函数替换成这个

通过调用python列表的pop()和insert()方法,我们就实现了让图片滚动起来。列表是不是很强大呢?(请自行运行观看效果)

让苹果快速滚动飞起来

好了,我们不仅要让苹果循环滚动起来,还要让苹果滚得快到飞起。(苹果:“我太难了”)

# 把上个程序中的draw()函数替换成这个

这个程序的原理就是,当一个物体快速移动的时候,人眼是能够自动“补充画面帧数”的,所以我们不再一个一个像素的滚动,而是每次直接把n列像素从一边拿下来接到另一边。(通过在setup()中设置frameRate()能够控制程序更新速度)

a6cb40fc63788966690db0d6404d1278.png
快速滚动的苹果https://www.zhihu.com/video/1175124935423574016

思考题

如何实现快速的让苹果移出画面呢?你有没有其他更有意思的主意呢?

恰饭时间

强烈推荐《python基础教程》,点赞加关注专栏,可以获得作者认真标注而且手动加详细目录的pdf电子版文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值