计算机入门课Stanford CS101-week2

2017-03-17  本文已影响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后还是不对,最后还是靠排列组合找出的最佳答案,囧!

上一篇下一篇

猜你喜欢

热点阅读