程序员分手手册,教你如何恢复单身_ZackSock的博客-程序员秘密

技术标签: # Python小案例  Python  

程序员分手手册,教你如何恢复单身

一、前言

首先声明,下面的言论纯属胡扯,请不要当真。

在大家的印象当中,程序员是一个高薪职业,经常认为程序员是一个精英群体。现在我就告诉你们,这是真的。也正是因为这样,程序员非常受欢迎,通常一个程序员会有10到11个女生追(此处数字为二进制)。所以大多数程序员都不是单身,这也是程序员非常苦恼的地方。所以很多程序员都想方设法和女朋友分手,看到这篇文章的你幸运了,今天让你学以致用,写个分手小程序,让你享受单身的自由。

二、哈?去旅游?

昨天是5月20号,之所以不在昨天发还是出于对人身安全的考虑。程序员小汪有这么一个苦恼。

他说:“我那个女朋友啊,烦得很,天天粘着我,代码都没时间打了。就昨天,还说要去旅游,她是想peach(屁吃)吧,我那么大个项目(实现登录注册),哪有时间陪她去旅游啊!”。

听到了小汪的抱怨,我思索了一番,问:“你渴望单身吗?”。

小汪回答:“那当然最好了,这样我就能安心写我的项目了”。

于是我就给程序员小汪出了个主意,小汪以下面这个姿态来给我报喜:

在这里插入图片描述

看样子他是成功了。我问小汪:“安排上了?”

小汪略显沮丧:“失败了,不知道哪个流程出了问题”。

我让小汪给我看看我让他做的东西,看完后我摇了摇头:“这个不行,太好看了,再丑点就能成功。”

我让小汪改了改代码,过了一段时间,小汪又换了一副容颜。这次的他容光泛发,从他的表情来看,这回没问题了:

在这里插入图片描述

他脸庞还有些许红润,嘴角带着血丝,但是仍掩盖不了他内心的喜悦。他说:“感谢大哥的教导,已经分了。虽然屏幕被砸了,键盘被崴了,鼠标也没尾巴了,但是都值了。”

三、免责声明

看到这里很多程序员同胞们肯定很好奇,我到底让小汪做了些啥。大家别急,我会告诉大家的。在此之前需要大家阅读以下声明:

通过使用内容随之而来的风险与作者无关。访问者可将本文提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。

最后有啥问题请不要祖安作者,万分感谢。

四、事情经过

我给小汪的提议是,既然他女朋友想去旅游那你可以展现一下男人的魅力(抠门),详细描述你们可以在他们的聊天中得知:

小汪说:“你旅游是去干啥啊?除了吃就是拍照,吃哪都可以吃啊!”

汪妻答曰:“刚恋爱的时候都叫人小甜甜,现在还凶人家。人家就是想要拍照嘛!”

这句话正好就中了小汪下的圈套,小汪讲道:“那好啊,我给你拍总行了吧!”

说完,小汪坐到电脑前。汪妻以为他在订绿皮火车票,内心暗喜。于是在一旁刷起了抖音。万万没想到,小汪却打开了pycharm,一旁刷抖音的汪妻并没有注意到。首先,小汪按win+R输入了cmd,然后在命令行输入了下面两段代码:

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install -i https://mirror.baidu.com/pypi/simple paddlehub

小汪默念道:“大哥是说要先安装paddlepaddle和paddlehub,看着是这两句。”小汪思索了一会儿:“抠图要怎么写来者?”他打开浏览器,输入了这个网址:别再自己抠图了,Python用5行代码实现批量抠图。“大哥写的太好了,一下就看懂了”,于是他继续往下写:

from PIL import Image
import paddlehub as hub
# 加载注释
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')
# 抠图,执行后会生成一个humanseg_output目录,png图片与原图片同名
results = humanseg.segmentation(data={
    'image':['master.jpg']})
# 读取png图片
im = Image.open('humanseg_output/master.png')
# 通道分离
r, g, b, a = im.split()
# 读取背景图片
bg = Image.open('bg.jpg')

# 获取粘贴位置
size1 = im.size
size2 = bg.size
im.resize((size2[1], size2[1]))
x = size2[0]-size1[0]
y = size2[1]-size1[1]

# 将png图片粘贴到背景上
bg.paste(im, (x, y), mask=a)
# 保存结果图
bg.save('result.jpg')

小汪运行了程序,发现居然报错了,跑来问我,发现是有模块没安装,他又在cmd中执行下列代码:

pip install pillow

这下运行没问题了,小汪摸着胡须,挠着头上所剩无几的头发,我估摸着,这一挠又挠死了几个字节的毛囊。他看着下面这几张图片(图中并非小汪女朋友):

在这里插入图片描述

小汪心中想着,这下应该没问题了,于是就把实现好的图片给女朋友看。汪妻大怒:“你不想带我去玩你就说啊,还要弄一个程序糊弄我!”,接着扇了小汪一大嘴巴子。小汪暗喜,可是小汪并没能高兴太久。汪妻刷到了这么一条抖音:“有个程序员男朋友是什么体验?巴拉巴拉~”,在看到代码的那一刻,汪妻觉得自己误会小汪了,于是又和小汪和好了,小汪含泪接受了女朋友的道歉。

出门后的小汪又找到我,我又给小汪出了个主意。小汪回到家,打开浏览器进入OpenCV官网:https://opencv.org/releases/ 。下载了对应版本的软件,然后安装,他在安装目录找到source\data\haarcascades目录,拿出了haarcascade_frontalface_default.xml文件,小汪有些迷惑,也没管太多,只是用浏览器打开了这个页面:OpenCv识别小罗伯特唐尼。心想,有啥不会的查一下就好了。

然后小汪在cmd执行下面两句代码:

pip install opencv-python
pip install opencv-contrib-python

然后小汪想着我说的话,把女朋友的脸换成一个丑一点的人就好了。又写下了如下代码:

import cv2

def face_detect(im):
    """检测人脸"""
    im = cv2.imread(im)
    grey = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    faces = face_detector.detectMultiScale(grey)
    # 返回一张人脸
    return faces[0]

写到这里,小汪发现haarcascade_frontalface_default.xml原来是在这里使用的,于是他把文件复制到项目下来。他心里想到:“这就可以检测人脸了!”。但是还不够,他继续写:

def change_face(im, face_loc, face_im):
    x, y, w, h = face_loc
	# 读取女朋友图片
    im = cv2.imread(im)
	
    # 读取要换的脸
    face_im = cv2.imread(face_im)
    face_im = cv2.resize(face_im, (w, h))

    # 人脸区域切换
    im[y:y + h, x:x + w] = face_im

    # 保存
    cv2.imwrite('result.jpg', im)

小汪又在main中写到:

if __name__ == '__main__':
    face = face_detect('master.jpg')
    change_face('master.jpg', face, 'face.jpg')

运行后结果图出来了,小汪点开结果图,大声笑了起来:

在这里插入图片描述

汪妻被笑声吸引,看到屏幕上的图片勃然大怒。崴了键盘,砸了屏幕,扯断了鼠标,还把小汪给胖揍了一顿,小汪血流不止,但是还止不住笑声。汪妻果断提出分手。到此事情算是画上了一个完美的句号。

五、事情结束了?

很多人疑惑,小汪为什么要这么做,大家都觉得小汪这样做很激进。但是其实小汪才是最清醒的那个,小汪在日记中写道:“别人笑我太疯癫,我笑他人看不穿”。就在这时,小汪的女朋友回来了:“我刚刚刷到了一个抖音,原来是我不懂程序员的幽默,我错了,你能原谅我吗?”

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ZackSock/article/details/106249981

智能推荐

分类(category) 和类扩展()_81192_J的博客-程序员秘密

1. 分类只能给原有类添加方法,不允许添加变量2. 分类中@property只会生成getter和setter方法声明 ,不会生成私有成员和方法实现3. 分类中可以访问原有类.h中的属性4. 分类如果和原有类有同名方法, 会调用分类方法,忽略(覆盖)原有类方法,尽量不要这样写5. 多个分类都有同一个方法,最后一个编译的被执行...

大数据智慧地球云 IBM软件2012三面出击_weixin_34249367的博客-程序员秘密

立足于2011年发布的软件业务发展路线图,蓝色巨人IBM新的一年计划在大数据、智慧地球和云计算三个领域长驱直入,向着“到2015年软件业务为IBM贡献50%利润”的目标继续进发。  “对于每一位IBM软件业务的员工来说,最近一段时期是令人振奋的。伴随着软件业务转型的深入,IBM软件业务在2011年再创佳绩,同时在许多创新领域有了坚实的技术积累和市场拓展。基于以往的成功经验...

springboot房贷计算器 等额本金_springboot 计算器_勘察加熊人的博客-程序员秘密

package com.org.controller;import com.org.dao.PriceDao;import com.org.service.PriceService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.

python中类方法与实例方法的区别-Python实例方法、静态方法和类方法详解(包含区别和用法)..._weixin_37988176的博客-程序员秘密

和类属性一样,类方法也可以进行更细致的划分,具体可分为类方法、实例方法和静态方法。和类属性的分类不同,对于初学者来说,区分这 3 种类方法是非常简单的,即采用 @classmethod 修饰的方法为类方法;采用 @staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法。其中 @classmethod 和 @staticmethod 都是函数装饰器,后续章节会对其做详细介绍。接...

分区索引--global和local,prefix和non-prefix_congse3359的博客-程序员秘密

1.分区表和分区索引的概念是分开的。分区表上建的索引就是分区索引,是错误的。2.global分区索引也是可以建在非分区表上的,local分区索引只能建在分区表上。3.关键字global和local都是针对分区索引,虽然非...

随便推点

linux - restart apache出现ServerName_Alps1992的博客-程序员秘密

* Restarting web server apache2 AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1. Set the ‘ServerN

python获取系统换行符_不同操作系统,python换行符是什么?_weixin_39911916的博客-程序员秘密

不同操作系统,python换行符是什么?发布时间:2020-04-21 14:17:41

自然语言处理分词汇总和相关机器学习_梦无痕123的博客-程序员秘密

中科院NLPIR(推荐)http://ictclas.nlpir.org/原名ICTCLAS,是由中科院计算所历经数年开发的分词工具,采用C++编写。主要功能包括分词、词性标注、命名实体识别、用户词典功能,新词发现与关键词提取。可以可视化界面操作和API方式调用。哈工大LTP(推荐)http://www.ltp-cloud.com/语言技术平台(LTP)是哈工大社会计算

Category: Effects_咔啡的博客-程序员秘密

jQuery UI adds quite a bit of functionality on top of jQuery’s built-in effects. jQuery UI adds support for animating colors and class transitions, as well as providing several additional easings. In ...

Category的用法(类目)_c# category_zhou某某的博客-程序员秘密

Objective-c中提供了可以让我们扩展类定义的手段:类目,延展和协议。接下来我就给大家说说类目:为已知的类增加新的方法,可以动态的为已存在的类添加新的行为,不需要访问其源代码,也不需要创建子类,可以向一个类中添加人一多的类别。由于不能添加新实现变量,因此与类声明不同的是,类别的声明中没有实例变量部分。类目的局限性1.无法向类中添加新的实例变量。2.名称冲突,即类别中得方法与现有的

category的应用_泥瓦罐的博客-程序员秘密

创建对私有方法的向前引用。一般情况下,没有在.h接口文件中声明,只有在.m文件中出现的方法,外界是不能调用的。 但是通过定义类别后,把这个.m文件中的方法在类别的.h文件中声明出来,外界就可以调用了。 这种方式就是对私有对象的向前引用。向对象添加非正式协议。正式协议是通过@protocol关键字声明的一系列方法,然后由准守协议的类去实现这些方法。非正式协议是通过分类,将正式协议里声明的方法声