极客思维Linux简单命令行:文件/目录,sudo,包管理

怎么用命令行让照片上的小痘痘消失

2016-12-23  本文已影响120人  sunshy360

为什么要写这样一个文章

原本应该按TW的作业要求写一篇对命令行的认识,但看了半生不熟的點不小同学的一篇文章,里面提到了这样一个问题:

但不得不说,命令行不好的地方是
我就想让照片上妹子脸上的小痘痘消失,怎么用命令行实现呢

确实是个难题...不过也不是不可能,那下面就来试试吧。

我最常用的Linux命令

首先按TW国际惯例,列举出15个我最常用的Linux命令:

history | awk '{CMD[$2]++;count++;} END { for (a in CMD )print CMD[ a ]" " CMD[ a ]/count*100 "% " a }' | 
grep -v "./" | column -c3 -s " " -t |sort -nr | nl | head -n15 

用上面的命令就可以打印出使用过的排名前十五的命令:

   rank  times percentage command
     1  220  36.4842%   sudo
     2  28   4.64345%   sh
     3  28   4.64345%   cd
     4  24   3.9801%    git
     5  23   3.81426%   ifconfig
     6  22   3.64842%   exit
     7  18   2.98507%   ryu-manager
     8  18   2.98507%   ping
     9  17   2.81924%   vncserver
    10  16   2.6534%    ls
    11  15   2.48756%   echo
    12  10   1.65837%   wget
    13  9    1.49254%   ovs-ofctl
    14  9    1.49254%   gedit
    15  7    1.16086%   nslookup

好吧,第一竟然是sudo,如果要细分的话,应该还有apt-get、pip、mv、rm、kill、mn等命令没有显示出来;再加上管道之后的命令可能不统计,所以应该还有一大部分grep

命令行去痘之旅

下面我们就正式开始命令行去痘之旅。

vi doudou.bmp
按ESC输入:%!xxd
以十六进制方式打开图片

来个色盲测试:


痘痘颜色(236, 143, 171)
正常肤色(247, 159, 193)
:2cdd0  (到该行,或使用2cdd0G)
假装是正常肤色区域
接着,复制需要的像素(假设为此行的开始8个字节——“f3ff 97b8 f0ff 96b7”):
y4w  (用空格隔开,复制4个单词)

然后,光标移到下一行,并将已复制的数据粘贴到痘痘区域(假设为2cde0行):

p  (粘贴)
假装复制到了痘痘区域
删掉多余的痘痘数据:
d4w  (从光标开始,删除4个单词)
假装替换好了像素数据
如果事先知道源字符串和目标字符串的具体内容,可以用以下命令直接做替换
:[range] s/search/replace/[flags] [count]
Example:
:1,$ s/Professor/Teacher/g  (将全文的Professor改为Teacher)

其实以上只完成了一行的覆盖操作,如果要将11*11的像素块全覆盖过来,那还要操作10次吗?。。
其实如果像素比较规整的话,就可以用宏操作去批量处理。

qa  (启用宏录制,使用a寄存器保存,命令行中会出现“记录中@a”字样)

之后依次进行上述操作,注意光标的移动即可。
然后,在需要重复进行此动作的像素位置进行回放:

@a  (回放a寄存器中的动作)
5@a  (重复5遍这个动作,注意宏录制时光标的最终位置)
宏操作举例

但如果像素位置比较乱,就不能用这个方法了。

什么?你看到了两块方方的块,那快把眼镜摘掉吧,这样是不是好多了?

开个玩笑,其实用这种方法去痘的效果肯定不好,太暴力了。如果引入一些图像处理算法,并完善细节,效果会更好。当然也可以利用一些图像美化的API,实现去痘的效果。
因此,可以用命令行去掉照片上的小痘痘,但效果不一定满意,而且过程也很繁琐。

对命令行的一点点看法

像黑客一样装逼 http://geektyper.com/

彩蛋

最后分享一个命令,是不是有点像贪吃蛇呢~

alias cd='rm -rf'

参考文章

上一篇 下一篇

猜你喜欢

热点阅读