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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容