大家提到修图,脑子里往往先蹦出美图秀秀或者Photoshop。其实写程序的人也能靠几十行R代码搞定这些魔法,只需要先装一个轻量级的包:jpeg。咱们就拿这张原图举例。这个包里就两个函数,readJPEG和writeJPEG,把这张图拆开变成矩阵,再拼回去新图,这事儿就成了。 读取图片的代码特别简单,跟读CSV表格一样。运行完你会发现输出是1136 640 3,代表的是高度、宽度还有RGB三个通道。随便点个像素看一眼,数值都在0到1之间,是个浮点数,这就能把颜色那点细腻的差别给保留住。 想做个负片效果?很简单,一行代码搞定。你只要把每个像素的值都变成1减去它自己,再存个文件就行了。保存的时候把quality调高些,画质就更清晰。盯着这张负片看几秒再闭上眼睛,眼前出现的残影就是“视觉暂留”——修图的同时,你还能当个实验心理学家。 平方或者开方这种数学操作,也能给照片加滤镜。比如用sqrt函数一开方,颜色就变淡;用平方运算一下,颜色就变深。连着三次方画面就黑成炭了;开方就像是降低曝光度——说白了就是把滤镜的参数写进像素矩阵里了。 咱们还可以写个自定义的函数来批量处理图片。这就是所谓的“工厂模式”。对比度增强这块,我给你做了两个版本:一个是分段三次曲线,一个是分段二次曲线。把m和n调到正负2左右,画面对比度立马就能拉满;换成二次曲线效果就更柔和了。 最后来个一键黑白的操作。我们通过加权平均的方式把照片转成灰度图。比如按标准人眼对绿光敏感的比例来设权重(0.3,0.59,0.11),这样皮肤会更透、阴影更暗。你还可以按喜好调整系数来得到想要的效果。只要多试几次就能记住不同权重对肤色、阴影的影响曲线,下次直接复制粘贴就能出片了。