Matlab闯Python Challenge第七关
昨天晚上,拾起被我扔下很久的之旅。到了第七关,郁闷的事情来了。闯第七关需要用到Python Imaging Libaray,和我装的Python 3.1不兼容。不想因为如此变态的原因,放弃Python Challenge。于是,转而求助Matlab。幸好,Matlab的Image Processing Toolbox很强大。
先简单介绍一下Python Challenge。它是一个闯关游戏。每一关的题目是一副图片,有的时候图片下会有文字提示,有的时候需要看网页的源代码才能猜出到底想让你干嘛。题目的答案是一个字符串,把它输入到地址栏里,如果答对的话,就可以进入下一关。解答的过程是需要编程的。虽然,这个网站的作者本意是希望你用Python解答,但是用其他语言也是可以的。
题目只有一幅图片:

奥妙铁定在图片中突兀的灰色条上。灰色条的颜色是一块块的。我们需要得到它的RGB值。
首先,下载图片oxygen.png。我们要分析的是灰色条。在开始之前,我们先用Matlab中的Image Tool来观察一下图片。
1 | imtool('oxygen.png') |
使用上述命令,打开Image Tool的界面。在界面下方显示了鼠标所指的点的Pixel info,其中包括了坐标和RGB值。但是,一次只能看一个点。为了一次性看一个区域的像素信息,我们可以使用Tools->Pixel Region。
上图中,每个格子代表的是图中的一个像素,其背景色就是该像素的颜色,格子中还有它的RGB值。此时,我们可以通过拖动、放大及缩小Image Tool中出现的白色方框,来改变Pixel Region中的显示区域。
通过观察,会发现:
- 灰色区域是从第44行开始到第52行结束的。
- 点的R值,G值,B值相同。
- 同列不同行的点的RGB值是相同的。
- 一行中,前5个点的RGB相同,之后是相邻7个点的RGB相同。
1 2 3 4 5 6 7 8 | I=imread('oxygen.png'); line=I(44,1:629); i=6; y=line(1); while i<608 y=[y;line(i)]; i=i+7; end |
我们得到了列向量y,y由87个整数构成。我们想要的是一个字符串。我们知道RGB的值是从0到255的;ASCII码是由0到127的,其中可打印字符是从32到126。而y的最小值是32,最大值是121。因此,我们可以试着把y转成相应的字符。
1 2 | S=char(y); fprintf('%s\n',S) |
结果是:smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]。显然,我们把“105, 110, 116, 101, 103, 114, 105, 116, 121”再次转成字符。
1 | char([105, 110, 116, 101, 103, 114, 105, 116, 121]) |
答案是:integrity
原创文章,转载请注明: 转载自ELLY66
本文链接地址: Matlab闯Python Challenge第七关
文章的脚注信息由WordPress的wp-posturl插件自动生成
Evernote lets you save all the interesting things you see online into a single place. Access all those saved pages from your computer, phone or the web. Sign up now or learn more. It's free!