美文网首页
计算机入门课Stanford CS101-week2

计算机入门课Stanford CS101-week2

作者: 月白子 | 来源:发表于2017-03-17 00:24 被阅读0次

    For-loop (Javascript里没有这个函数):

    对图像中所有的点逐一进行操作,这里body lines are indented to show difference with other lines.

    image = new SimpleImage ("flowers.jpg")

    for(pixel:image){

         pixel.setRed(0);

         pixel.setBlue(0);

    }

    print(image)

    Image Expressions

    主要是讲了一个pixel.getRed()函数,这个函数可以直接获取图像中每一个pixel的rgb值,之后我们可以对它获得的值进行乘法运算。这样当我们想要对以后图像的颜色进行调试时,可以不用具体的rgb值,只要尝试相对的倍数就可以。

    不过这个函数也是对图像上所有的pixel来进行操作的。

    image=new SimpleImage("flowers.jpg")

    for(pixel:image){

        pixel.setGreen(pixel.getGreen() * 0.75)

    }

    print(image)

    当然,可以把pixel.getGreen()赋给一个变量,然后再setGreen里直接用变量名。

    image=new SimpleImage("flowers.jpg")

    for(pixel:image){

    old=pixel.getGreen()

    pixel.setGreen(old* 0.75)

    }

    print(image)

    Image Puzzel

    这个section主要是讲了一种调试颜色的思路。一张色调在黑-红之间的金门大桥的照片,被一片蓝绿色“雪花遮盖”。这个图像其实是所有pixel的r值被除了一个很大的值,导致pixel之间虽然r值的相互关系可以构成一个图像但暗度太低所以看不清,形成了一个黑色的画布,上面的b/g值可以随意设定显现出任意,蓝绿色图像。

    修复的方法就是把b/g值设成0,然后把所有pixel的r值等比增大就行。

    Grayscale Images

    当一个颜色r/g/b三个值相等的时候,它就处于灰色色谱上,不偏向于红绿蓝任何一种颜色。

    怎么把彩色的图片转化成灰色的呢?如何衡量图片上某个颜色的亮度呢?---答案是取r/g/b三个值的平均值。

    image = new SimpleImage("flowers.jpg");

    for (pixel: image) {

    avg=[pixel.getRed()+pixel.getGreen()+pixel.getBlue()]/3

    pixel.setRed(avg)

    pixel.setGreen(avg)

    pixel.setBlue(avg)

    }

    print(image);

    其中求平均值的步骤必须放在for loop里面,因为每个pixel的明亮度不同,需要进行逐一计算。

    提醒:经过试验,setGreen,getGreen函数后面必须要立马跟上括号,但for和SimpleImage就没有关系,不用立马跟上。

    Ps,第二课的作业试颜色真的是,没有最好只有更好,每次我觉得已经不错了submit后还是不对,最后还是靠排列组合找出的最佳答案,囧!

    相关文章

      网友评论

          本文标题:计算机入门课Stanford CS101-week2

          本文链接:https://www.haomeiwen.com/subject/mftfnttx.html