-
计科入门9: 区别对待【IF语句】
普通类 -
- 支持
- 批判
- 提问
- 解释
- 补充
- 删除
-
-
IF语句
今天我们学习如何通过我们的“右臂”IF【还记得左膀是谁么?】
实现如下变换:
【注意今天的教程内容和斯坦福的官方课程有不小的区别】



----------------------------------------------
OK,在做一切变化之前先想想我们如何实现以上变换:
我们现在已经会把一个像素变成我们指定的颜色
甚至把一个图片的把所有像素变成我们指定的颜色
但是
-
想一想:
我们现在的任务是什么?
-
答案:
我们现在的任务是:
找到我想改变的像素
改变他的颜色
----------------------------------------------
我们现在会遍历每一个像素
想一想:
如何找到我们想要的像素呢?
----------------------------------------------
-
答案:
我们如果能有一个机制
遍历每一个像素X
对于遍历到的X,判断它是不是我们要找的像素
如果是,我们就对X做操作
如果不是,我们就继续所有像素的遍历
----------------------------------------------
如果能够实现以上过程,我们就能很方便的实现:
把图片的某一个特定区域变色的功能了。
----------------------------------------------
我们知道,编程中,循环是通过FOR来实现的
判断呢?
实现的方法是:
-
IF【如果】逻辑
看看如下
-
IF的书写方法

-
判断相等
尝试:
如果x等于100,打印“X等于100”
你可能会写:

就会产生右边的错误提示
-
想一想:为什么?
-
答案:
原因很简单,我们第一讲就讲过,计算机很傻的
既然他知道我们的一个=号是赋值的作用
----------------------------------------------
例如:x=10 是把10放到x里
----------------------------------------------
那我这里写的x=100的功能就是把100放到x里
而不是判断x是否等于100了
----------------------------------------------
判断相等的写法是 “==”
----------------------------------------------

注意:
大于等于是:>=
小余等于是:<=
-
"或者"与"并且"
“A或者B”表示:A或者B,只要有一个成立就行了
“A并且B”表示:A和B,必须两者同时成立
----------------------------------------------
我们实现一下这两种语法,实现:
当X等于100或者X等于10的时候,打印“X等于10或者100”

当X等于100并且Y等于10的时候,打印“X等于100并且Y等于10”

-
练习:找白色
进入课程网站:
http://www.stanford.edu/class/cs101/image-2-exercises.html
实现如下变换:

我们的思想是这样的:
----------------------------------------------
遍历所有的像素
对于每一个像素X
判断X是不是白色
如果是
变成红色
如果不是
不做任何操作
----------------------------------------------
或者我们可以用如下图来表示我们的思想:

-
想一想
现在的问题是,如何判断我们这个图形中的白点呢?

提示:白色点是红色是255并且绿色是255并且蓝色是255的像素点
----------------------------------------------
-
答案:

-
延伸练习1:变一半
注意:延伸练习有一定难度,可暂时跳过
填充以下代码,实现如图效果

提示:
我们的图片是10 × 10 像素的
不能用for-each循环了,要用for循环的嵌套
-
延伸训练2:
填充以下代码,实现如图效果

提示:
我们用 A%B 来计算 A除以B的余数,比如 4%2等于0,4%3等于1
我们用判断 A%2是不是等于0来判断A的奇偶性,比如4%2等于0所以4是偶数
----------------------------------------------
OK,现在我们已经有强大的左膀右臂了
让我们来实现以下开篇的
-
提车标志变换

可能我们已经跃跃欲试了:
不就是找红色,变蓝色么,一下代码行么?

我们发现,通过(255,0,0)来找红色是不行的
-
想一想:为什么?
-
答案:
因为这样找到的只是最红的那一点,而我们需要STOP里面的各种亮度的红色
-
想一想,怎么办?
于是我们想到了
-
第二种办法尝试
-
想一想:
为什么白色的“STOP”文字没有了?
-
答案:
原因很简单:假设一种红色是(220,23,23) 当然我们的红色元色是大于200的
但是白色的点呢:(255,255,255) 其中红色元色同样也是大于200的
甚至其他的非白色的点,有可能红色元色同样大于200
这就是旁边的楼房也有被选中的像素的原因
-
想一下:
这怎么办
-
答案:
可能你已经想到了如下的方法:

效果还行,但是不是太好
----------------------------------------------
我给你大家介绍一个更好的方法:
-
主导色
通过分析,我们得出,红色绝对主导的那种颜色
不但红色元色超过绿色和蓝色元色
而且更重要的
他超过一定倍数的RGB的平均值:

通过上节课的教程,大家还记得怎么求三元色的平均值么?
-
试一试
-
答案:

【有个错别字:拼均值 --> 应该是“平均值”】
----------------------------------------------
OK,现在大家的对图片的处理能力又上了一个台阶了
----------------------------------------------
-
练习:路基变色
-
延伸练习:香蕉变色
对于网页http://www.stanford.edu/class/cs101/image-4-expressions.html 最下面的练习
尝试只把香蕉变成灰色:

提示:
红色占主导的颜色中,红色元色大于RGB平均值的倍数
那黄色主导的颜色怎么办?怎么样才能把黄色作为整体来进行判断?【还是要用平均值的思想】
-
-
- 标签:
- 100
- 练习
- 判断
- 想一想
- coursers
- 实现
- 等于
- 答案
- 白色
- 像素
- if
- 红色
-
加入的知识群:



学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~