• 计科入门9: 区别对待【IF语句】

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • IF语句

    今天我们学习如何通过我们的“右臂”IF【还记得左膀是谁么?】

    实现如下变换:

    【注意今天的教程内容和斯坦福的官方课程有不小的区别】

     

     

    ----------------------------------------------

    OK,在做一切变化之前先想想我们如何实现以上变换:

    我们现在已经会把一个像素变成我们指定的颜色

    甚至把一个图片的把所有像素变成我们指定的颜色

    但是

     

    • 想一想:

    我们现在的任务是什么?

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    • 答案:

    我们现在的任务是:

    1. 找到我想改变的像素

    2. 改变他的颜色

    ----------------------------------------------

    我们现在会遍历每一个像素

    想一想:

    如何找到我们想要的像素呢?

    ----------------------------------------------

     

     

     

     

     

     

     

     

     

     

     

    • 答案:

    我们如果能有一个机制

    遍历每一个像素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,必须两者同时成立

    ----------------------------------------------

    我们实现一下这两种语法,实现:

    1. 当X等于100或者X等于10的时候,打印“X等于10或者100”

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

     

     

     

    • 练习:找白色

    进入课程网站:

    http://www.stanford.edu/class/cs101/image-2-exercises.html

    实现如下变换:

     

     

     

     

     

     

     

     

     

     

    我们的思想是这样的:

    ----------------------------------------------

    遍历所有的像素

    对于每一个像素X

    判断X是不是白色

    如果是

    变成红色

    如果不是

    不做任何操作

    ----------------------------------------------

    或者我们可以用如下图来表示我们的思想:

     

     

    • 想一想

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

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

    ----------------------------------------------

     

     

     

     

     

     

     

     

     

     

     

     

    • 答案:

     

    • 延伸练习1:变一半

    注意:延伸练习有一定难度,可暂时跳过

    填充以下代码,实现如图效果

    提示:

    1. 我们的图片是10 × 10 像素的

    2. 不能用for-each循环了,要用for循环的嵌套

     

    • 延伸训练2:

    填充以下代码,实现如图效果

    提示:

    1. 我们用 A%B 来计算 A除以B的余数,比如 4%2等于0,4%3等于1

    2. 我们用判断 A%2是不是等于0来判断A的奇偶性,比如4%2等于0所以4是偶数

    ----------------------------------------------

     

     

     

     

     

     

    OK,现在我们已经有强大的左膀右臂了

    让我们来实现以下开篇的

     

    • 提车标志变换

    可能我们已经跃跃欲试了:

    不就是找红色,变蓝色么,一下代码行么?

    我们发现,通过(255,0,0)来找红色是不行的

     

    • 想一想:为什么?

     

     

     

     

     

     

     

     

     

     

     

    • 答案:

    因为这样找到的只是最红的那一点,而我们需要STOP里面的各种亮度的红色

     

    • 想一想,怎么办?

     

     

     

     

     

     

     

     

     

     

    于是我们想到了

     

    • 第二种办法尝试

    我们要找红色元色大于某个值的所有像素点:

    ----------------------------------------------

     

    >50行么?

    显然不行!!!

    ----------------------------------------------

     

    >100呢?

    还是不行!!!

    ----------------------------------------------

     

    >200!!!

    好像差不多了,但是现在还有一个问题:

     

    • 想一想:

    为什么白色的“STOP”文字没有了?

     

     

     

     

     

     

     

     

     

     

     

     

    • 答案:

    原因很简单:假设一种红色是(220,23,23) 当然我们的红色元色是大于200的

    但是白色的点呢:(255,255,255) 其中红色元色同样也是大于200的

    甚至其他的非白色的点,有可能红色元色同样大于200

    这就是旁边的楼房也有被选中的像素的原因

     

    • 想一下:

    这怎么办

     

     

     

     

     

     

     

     

     

     

     

    • 答案:

    可能你已经想到了如下的方法:

    效果还行,但是不是太好

    ----------------------------------------------

    我给你大家介绍一个更好的方法:

     

    • 主导色

    通过分析,我们得出,红色绝对主导的那种颜色

    不但红色元色超过绿色和蓝色元色

    而且更重要的

    他超过一定倍数的RGB的平均值:

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

     

    • 试一试

     

     

     

     

     

     

     

     

     

     

     

    • 答案:

    【有个错别字:拼均值 --> 应该是“平均值”】

    ----------------------------------------------

    OK,现在大家的对图片的处理能力又上了一个台阶了

    ----------------------------------------------

     

     

     

    • 练习:路基变色

    对于网页 http://web.stanford.edu/class/cs101/image-8-if-exercises.html 最下面的练习

    尝试只把红色路基变成灰色

     

     

    • 延伸练习:香蕉变色

    对于网页http://www.stanford.edu/class/cs101/image-4-expressions.html 最下面的练习

    尝试只把香蕉变成灰色:

    提示:

    红色占主导的颜色中,红色元色大于RGB平均值的倍数

    那黄色主导的颜色怎么办?怎么样才能把黄色作为整体来进行判断?【还是要用平均值的思想】

    • 标签:
    • 100
    • 练习
    • 判断
    • 想一想
    • coursers
    • 实现
    • 等于
    • 答案
    • 白色
    • 像素
    • if
    • 红色
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论。
      
暂无内容~~
顶部