计算机入门课Stanford CS101-week2
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后还是不对,最后还是靠排列组合找出的最佳答案,囧!