• 计科入门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”表示:AB,必两者同成立

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

    们实现一下两种法,实现

    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等于04%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条)

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



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